Abstract
abstract修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用 abstract修饰符以指示某个类只能是其他类的基类。标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。
1.抽象类:
用它修饰的类称为抽象类,抽象类不能实例化。
抽象类中,包括抽象方法,还可以有抽象属性。(抽象属性也必须改写。)
非抽象类从抽象类中派生,必须通过改写来实现所有继承而来的抽象方法。如果一个类,从抽象类中派生,但是没有对抽象类中的方法进行实现的话,那么这个类必须是抽象类。即派生类也是抽象类。
2.抽象方法:
抽象方法只能在抽象类中声明。不能再使用static和virtual修饰
抽象方法只给出方法原形。不能在抽象方法中包含任何可执行代码,没有方法体,用分号结束。
抽象方法在派生类中不能使用base关键字访问。
class Program { static void Main() { DeriverC2 tt =new DeriverC2(); //实例化DeriverC类,抽象类不能实例化 tt.function1(); } } abstract class BaseC //抽象类; { public abstract void function1(); //抽象类中的抽象方法; } abstract class DeriveC1 : BaseC //抽象类继承抽象类; { public void function2() { } //抽象类中的非抽象方法; } class DeriverC2 : BaseC //非抽象类继承抽象类; { public override void function1() //必须改写; { Console.WriteLine ("类DeriverC2具体实现类BaseC的抽象方法function1()"); } }
Virtual
virtual关键字用于修饰方法、属性、索引器或事件声明,并且允许在派生类中重写这些对象。
虚拟成员的实现可由派生类中的重写成员更改。例如,此方法可被任何继承它的类重写。
默认情况下,方法是非虚拟的。不能重写非虚方法
Override
override关键字要扩展或修改继承的方法、属性、索引器或事件的抽象实现或虚实现,必须使用override 修饰符。
override方法提供从基类继承的成员的新实现。
通过override 声明重写的方法称为重写基方法。重写的基方法必须与 override 方法具有相同的签名。
不能重写非虚方法或静态方法。重写的基方法必须是virtual、abstract 或 override 的。
override声明不能更改 virtual 方法的可访问性。override 方法和 virtual 方法必须具有相同的访问级别修饰符。不能使用修饰符new、static、virtual 或 abstract 来修改 override 方法。
重写属性声明必须指定与继承属性完全相同的访问修饰符、类型和名称,并且被重写的属性必须是virtual、abstract 或 override 的。
总结:
Abstract关键字能够修饰类,抽象类不能实例化,抽象类可以继承抽象类。
Virtual关键字修饰的虚方法和Abstract修饰的抽象方法的相同点是都用了override关键字进行重写方法,不同点是抽象方法必须存在于抽象类中,而子类必须重写,除非子类也是抽象的。
Override关键字,重写的基方法必须和override方法名字相同,属性也可以重写,重写属性和继承属性有相同的访问修饰符,类型和名称。