1、abstract 修饰符可以和类、方法、属性、索引器及事件一起使用(待实现)。修饰类时表示抽象类,只能作为其他类的基类,不能被实例化,可以包括抽象方法和抽象访问器,从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实现;
2、sealed不能修饰抽象类,修饰非抽象类时表示该类不能被继承;sealed override可以一起修饰虚方法或虚属性,不可单独修饰虚方法或虚属性;
3、virtual只能修饰基类的方法和属性(表示继承类可重写),不能修饰类(C# 类不允许多重继承,不存在虚基类,接口可多重继承),不能与static abstract override修饰符一起使用;
4、override,继承类的基类有虚属性和方法时,可利用override重写属性和方法,和基类有继承关系;(用基类申明新实例时,虚方法的实现优先使用继承类的重写方法)
5、new,可以让继承类实现对基类同名方法的覆盖,申明是一个新方法,和基类没有继承关系。(用基类申明新实例时,虚方法的实现优先使用有继承关系的方法。)
class program
{
static void Main()
{
A aa = new A();
aa.Function(); //输出("this is A!")
A bb = new B();
bb.Function(); //输出("this is B!")
A cc = new C();
cc.Function(); //输出("this is B!")
A dd = new D();
dd.Function(); //输出("this is B!")
}
}
class A
{
public virtual void Function()
{
Console.WriteLine("this is A!");
}
}
class B:A
{
public override void Function()
{
Console.WriteLine("this is B!");
}
}
class C:B
{
}
class D:B
{
public new void Function()
{
Console.WriteLine("this is D!");
}
}