C#基础入门 六

静态类进阶

静态构造方法

  • 用于初始化任何静态数据,或用于执行仅需执行一次的特定操作,在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数,静态构造方法是无参数的。
public static class Tool
{
static int length;
static void fun(){}
static Tool()
{
Console.WriteLine("public Tool()");//静态类构造方法
}
}

单例设计模式

  • 单例设计模式就是确保一个类只有一个实例,单例模式是资源管理的必备模式,保证一个类只有一个实例并且这个实例易于被访问。、
  • 如何实现单例模式:
    • 构造方法设为private
    • 内建静态实例
    • 静态构造方法给实例做初始化
    public class Singleton
{
private static Singleton instance;//内建静态实例
private Singleton(){}//构造方法必须设为私有
public static Singleton Instance
{
get { return instance; }
}
}
static Singleton(){
if (instance==null){
instance=new Singleton();//为实例初始化
}}

抽象类

练习

  • 用我们学过的知识,实现下面结构关系:图13

class Player
{
public virtual void Practice()
{
Console.WriteLine("player's practice");
}
}
class Footballplayer : Player
{
public override void Practice()
{
Console.WriteLine("footballplayer's practice");
}
}
class Swimmingplayer : Player
{
public override void Practice()
{
base.Practice();
Console.WriteLine("swimmingplayer's practice");
}
}
class MainClass
{
public static void Main(string[] args)
{
Player player = new Footballplayer();
player.Practice();
} }
  • 在这个例子中可以发现,基类中的训练方法只是起到了声明的作用,方法内部的语句,在子类中没有用到,像这样的方法,称为抽象方法。
  • 用abstract修饰的方法,称为抽象方法,抽象方法同时隐含虚方法,所以它不能再被virtual修饰。public abstract void Practice();
  • 抽象方法是一种新的虚拟方法,它只起到声明作用,所以只加一个";"号,一定不能带实现部分。
  • 继承时实现具体的方法,也就是使用override重写。
abstract class Player
{
public abstract void Practice();
}
  • 抽象类的用途:提供一个可供多个派生类共享的通用基类的定义。
  • 抽象类独立于抽象方法,也就是说没有抽象方法,类也可以声明为抽象类,抽象类不能被直接实例化,其他跟普通类没有区别。
abstract class Animal
{
int age;
void func(){
Console.WriteLine("Animal's function");
}
}
 abstract public class Player
{
abstract public void Practice();
}
public class Footballplayer : Player
{
public override void Practice()
{
Console.WriteLine("足球运动员在训练");
}
}
public static void Main(string[] args)
{
Footballplayer footballplayer =new Footballplayer();
footballplayer.Practice();
}
  • 总结:

    • 抽象方法只做声明,而不包含实现,抽象方法旨在继承后实现,所以不能用private修饰;
    • 抽象类不能被直接实例化;
    • 抽象类可以没有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类;
    • 如果抽象类的派生类不是抽象类,那么必须重写抽象类的所有抽象方法。
  • 抽象方法和虚方法:
    • 抽象方法一定不能有实现,虚方法一定要有实现;
    • 抽象方法被具体类继承后,一定要被重写,虚方法可以不重写;
    • 抽象方法是一种特殊的虚方法,一旦类中有抽象方法,则类必须声明为抽象类,抽象类中可以有虚方法。

C#基础入门 六的更多相关文章

  1. Mybatis框架基础入门(六)--动态sql

    主要是通过mybatis提供的各种标签方法实现动态拼接sql. 1.if标签 <!-- 根据条件查询用户 --> <select id="queryUserByWhere& ...

  2. MyBatis基础入门《十六》缓存

    MyBatis基础入门<十六>缓存 >> 一级缓存 >> 二级缓存 >> MyBatis的全局cache配置 >> 在Mapper XML文 ...

  3. MyBatis基础入门《六》Like模糊查询

    MyBatis基础入门<六>Like模糊查询 描述: 未改动的文件,不再粘贴出来.项目中SQL的xml映射文件重要标签如下: mapper namespace cache 配置给定命令空间 ...

  4. 小白学 Python 爬虫(38):爬虫框架 Scrapy 入门基础(六) Item Pipeline

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. .NET ORM 的 “SOD蜜”--零基础入门篇

    PDF.NET SOD框架不仅仅是一个ORM,但是它的ORM功能是独具特色的,我在博客中已经多次介绍,但都是原理性的,可能不少初学的朋友还是觉得复杂,其实,SOD的ORM是很简单的.下面我们就采用流行 ...

  7. SpringMVC基础入门

    一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 ...

  8. Linux基础入门学习笔记20135227黄晓妍

    学习计时:共24小时 读书:1小时 代码:8小时 作业:3小时 博客:12小时 一.学习目标 1. 能够独立安装Linux操作系统   2. 能够熟练使用Linux系统的基本命令   3. 熟练使用L ...

  9. saltstack之基础入门系列文章简介

    使用saltstack已有一段时间,最近由于各种原因,特来整理了saltstack基础入门系列文章,已备后续不断查阅(俗话说好记性不如烂笔头),也算是使用此工具的一个总结.saltstack的前六篇文 ...

随机推荐

  1. bzoj 3615: MSS

    Description 小C正在出一道题...因为语文水平有限他想不出复杂的背景,所以以下就是题意了. 平面上有N个点,开始时每个点属于一个不同的集合.不妨设点Pi属于集合Si.请维护数据结构支持以下 ...

  2. Plex音乐名称乱码原因id3版本

    标签编码支持情况: ID3v1:ISO-8859-1ID3v2 2.3:ISO-8859-1.UTF-16ID3v2 2.4:ISO-8859-1.UTF-16.UTF-8APEv2:UTF-8 修改 ...

  3. 学习笔记之Tips for Macbook

    写给Mac新手的入门指南 - 威锋网 https://mp.weixin.qq.com/s/pqmqGZhNwevx57KeLnzZmg https://bbs.feng.com/read-htm-t ...

  4. 1021 docker初识

    docker与虚拟机相比,没有虚拟化内核,转而使用宿主机的内核.因此docker更轻更快 docker缺点:后端兼容性测试需求.把软件安装在不同的操作系统上进行测试,观察软件运行是否良好. 不能用do ...

  5. sql在外键存在的情况下删除表

    SQL Server 批量 停用/启用 外键约束 今天百度知道上面,看到这样一个要求: 现在有一个库,有很多张表想要删除一张表的记录的时候,由于外键关联太多,所以,没法删除相应的记录,谁能帮忙写个存储 ...

  6. 熟练使用Linux进程管理类命令

    进程管理类命令 – ps命令 ps命令主要用于查看系统的进程 该命令的语法为:ps [参数] ps命令的常用参数选项有: -a:显示当前控制终端的进程(包含其他用户的). -u:显示进程的用户名和启动 ...

  7. linux下python3离线加载nltk_data,不用nltk.download()

    在不能上网的服务器上把nltk_data关联到python3,已经安装anaconda3所以不需要安装nltk,环境是linux 首先没有nltk_data在使用nltk会报错 LookupError ...

  8. oracle忘记sys及system密码

    一.忘记除SYS.SYSTEM用户之外的用户的登录密码. 用SYS (或SYSTEM)用户登录. CONN SYS/PASS_WORD AS SYSDBA; 使用如下语句修改用户的密码. ALTER ...

  9. Spring 3.1 entityManagerFactory java.lang.NoSuchFieldError: NULL Error

    This means there is a version mismatch--most likely with spring classes. So make sure all your sprin ...

  10. ArrayList原理(一)

    需要使用到动态数组的时候用的最多的就是ArrayList了,底层其实是Object数组,以下demo基于JDK1.8: List<Integer> list  = new ArrayLis ...