我们来总结一下C#中一些常用关键字的应用:
首先通过下面这张图理解一下Public,Internal,Protected,Private。
public 和internal 修饰类。
public,protected,private 修饰方法。
Abstract:
代表的是抽象,abstract 可以修饰类和方法。
修饰类的时候,这个类称为抽象类,表示所修饰的类是不完整的,并且它只能用作基类。
抽象类有以下特点:
抽象类不能直接实例化,并且对抽象类使用 new运算符会导致编译时错误。虽然一
些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者
含有对非抽象类的实例的引用(此非抽象类是从抽象类型派生的)。
抽象类不能被密封。
从抽象类派生的非抽象类(主要用途),必须具体实现所继承的所有抽象成员,从
而重写那些抽象成员。
修饰方法的时候,称为抽象方法。只能用在抽象类中修饰方法,并且没有具体的实现。
抽象方法的实现必须在派生类中使用override关键字来实现。
因为抽象方法声明不提供实际的实现,所以没有方法体;方法声明只是以一个分号
结束,并且在签名后没有大括号 ({ })。 例如:
public abstract void MyMethod();
在抽象方法声明中使用 static 或 virtual 修饰符是错误的,因为抽象方法需要被重
写,所以不能用static修饰,因为抽象方法是隐式的虚方法,所以不能用virtual修饰。
在静态属性上使用 abstract 修饰符是错误的。
在派生类中,通过包括使用 override 修饰符的属性声明,可以重写抽象的继承属性。
virtual
代表虚拟的,虚的,修饰的是方法。
virtual 关键字用于在基类中修饰方法。virtual的使用会有两种情况:
情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法。那么在对派生类
实例的调用中,该虚方法使用的是基类定义的方法。
情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法。那么在
对派生类实例的调用中,该虚方法使用的是派生重写的方法。
override
代表重写,修饰的是方法。
override 方法提供从基类继承的成员的新实现。 由 override 声明重写的方法称为重写
基方法。 重写的基方法必须与 override 方法具有相同的名称。
修饰方法的时候:
1:不能重写非虚方法或静态方法。重写的基方法必须是 virtual、abstract 或
override 的。
2:override 方法和 virtual 方法必须具有相同的访问级别修饰符。
3:您不能使用 new、static 或 virtual 修饰符来修改 override 方法。
4:重写属性声明必须指定与继承属性完全相同的访问修饰符、类型和名称,并且被
重写的属性必须是 virtual、abstract 或 override 的。
New
代表隐藏,修饰的是方法。
new 和override 的区别是:new 是隐藏父类方法,这就好比告诉别人,这个方法和父类
的方法是两个不同的方法,只是他们的签名刚好相同罢了,override 则不同,override
告诉别人,以后用我的instance调用的就是我的方法,用父类的instance调用的就是父类
的方法。
总结下:abstract,virtual,override,new 的关系。
override 的方法必须是abstract ,virtual, override 的。
abstract 的方法是隐式的virtual 方法。
virtual 的方法代表这个方法可以被重写,当然你也可以不重写它。
abstract的方法代表这个方法是必须被重写的方法。
new 的方法代表这个方法和父类的没关系,是一个新的“new” 方法,只是刚好签名相
同罢了。
以上的总结只是加深一下对C#中关键字的理解,大部分都是借鉴别人的,学完设计模式以后会用代码来加深对他们的理解。