http://netstring.cnblogs.com/archive/2005/08/07/209293.html
以前对关键字abstract和virtual一直没做太多深入了解,今天看msdn,专门翻到c#关键字章节,想系统了解一下c#关键字,其中第一个就是abstract,msdn上的原话是:abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用 abstract 修饰符以指示类只能是其他类的基类。接下来描述了abstract的一些特性:不能实例化;可以包含抽象方法和抽象访问器;不能用 sealed 修饰符修改抽象类,意味着该类不能被继承;从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实现;在方法或属性声明中使用 abstract 修饰符以指示此方法或属性不包含实现等等。"abstract"可以修饰类、方法、属性、索引器及事件。而看到virtual关键字的时候,产生了一个疑问:"virtual"关键字只能修饰方法和属性,却不能修饰类~但清楚记得以前上大学老师讲c++的时候有一个概念,叫虚基类。难道c#把virtual的这个特性去掉了?然后我到google找答案~看到了两篇文章“c++虚基类”和“深入剖析c#继承机制”,终于明白了原来是由于这两者的继承机制不同而决定的。c++允许多重继承,而c#只允许派生类从一个类中继承,由于多重继承产生的二义性问题需要虚基类来解决,所以c++有虚基类的概念,而c#由于单继承的原因不会产生继承而带来的二义性问题,所以不需要virtual关键修饰类。
链接:
c++虚基类 http://www.yesky.com/496/193996.shtml
深入剖析c#继承机制 http://www.yesky.com/SoftChannel/72342380468109312/20030726/1717126.shtml