C# 委托 && Virtual, abstract, override && 静态构造函数

来源:互联网 发布:指南针软件 编辑:程序博客网 时间:2024/06/07 07:24

1.委托

一般来说我们都是针对数据来做操作,但是有时候需要针对方法来操作,这个时候就用到了委托。

委托将方法当作参数,当委托的返回值是void时,系统会先假定这是个多播委托。所谓多播委托,即多个方法都委托给了同一个委托类,用关键字(+=)。这个时候激活委托,这些方法会依照被委托的顺序而执行。可以取消委托,用关键字(-=)。

 

2.Virtual, abstract, override

Virtual是成员的修饰符,即虚函数,不能用来修饰静态方法和类,因为没有意义。被virtual修饰的方法表明希望被派生类来override, 而静态方法无法override. 基于同样的理由,private 和override 和 abstract不能和virtual一起来修饰方法。

 

abstract可以修饰方法和类,即抽象方法和抽象类。实际上一旦abstract修饰了一个方法,那么该类也必须用abstract来修饰,即所谓的包含抽象方法的类一定是抽象类,但是需要注意的是抽象类不一定包含抽象方法。

抽象方法是没有方法体的,派生类可以通过override关键字来实现它。

抽象方法看起来和接口比较类似,但是抽象类也有自己存在的意义:

(1)首先抽象类是对“对象”的抽象,而接口是一种行为规范。

(2)抽象类可以实现部分方法或者全部方法,而接口不能实现任何方法

(3)抽象类的方法的权限可以是任意的,而接口必须是public

(4)抽象类的派生类不一定需要实现抽象类的所有方法,而实现接口的类必须实现接口所有的方法

(5)抽象类的成员变量不限权限,而接口的成员变量一定是staticfinal的

一般来说,接口是为了实现多重继承的,抽象类不能被多成继承,但是接口可以。

 

不能override没有修饰符virtual或者abstract的成员,因为类的成员默认是非虚的。

 

3.静态构造函数

很少用到的概念,典型用途是,当类使用日志文件时,将使用静态构造函数向日志文件中写入数据。

另外也可以根据其特性来做一些只做一次的事情,例如导入库文件之类。

静态构造函数是被系统调用的,程序员无法手动调用。在创建第一个类的实例或者引用任何静态成员之前,系统自动调用。该函数最多只能被调用一次,在类中也最多只有一个,又因为不能被继承,所以和无参的构造函数不冲突。静态构造函数没有访问修饰符和参数。

如果程序员没有写静态构造函数,而类中包含带初始值设定的静态成员的话,编译器会自动生成一个默认的静态构造函数。

 

原创粉丝点击