C# abstract和virtual关键字

版权声明:转载请注明出处 https://blog.csdn.net/s20160203/article/details/83054519

abstract:

顾名思义表示抽象,可以形容方法和类等。为什么要使用抽象类,个人理解,在设计一个父类时,会提供一些共同的方法,而继承的不同子类往往会有一些自己独特的方法,而这些方法在父类中没办法去统一,也没必要去实现,所以只做方法声明而不去实现,表示为抽象函数,用于子类去实现。

1.抽象方法时没有实现的,

2.拥有抽象方法的类必须修饰一个abstract的关键字从而变成一个抽象类;但是反过来,抽象类里面不一定要有抽象方法,比如写了一个非抽象类,但是这个类并不希望被人直接实例化,而是只能继承,我们可以把这个类变成一个抽象类(虽然这个类里面并没有抽象方法)。

3.抽象类不能被实例化,只能被继承,

4.抽象类的子类必须实现每个抽象方法,

5.抽象类里面除了可以有抽象方法以外,也可以有普通的方法,

6.抽象类的构造函数可以省略,编译器会自动加上,但是不能是一个抽象方法,而只能是一个普通的构造函数。

7.子类继承抽象父类后,可以使用override关键字覆盖父类中的抽象方法,并做具体的实现。也可以不实现抽象方法,留给后代实现,这是子类仍旧是一个抽象类,必须声明为abstract。

virtual:

1.virtual和virtual关键是在运行的时候,而不是在编译的时候。如果方法不是virtual,编译器就使用申明的类对应的类型也就是说不是virtual的,编译时就定了。

2.如果方法是virtual,然后子类使用了override,编译器就产生代码。然后在运行的时候,进行检测,看对象属于那个类,然后调用这个类的方法。

猜你喜欢

转载自blog.csdn.net/s20160203/article/details/83054519
今日推荐