zoukankan      html  css  js  c++  java
  • C# abstract 和 virtual 关键字

    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

  • 相关阅读:
    webservice理解
    什么是xmlschema
    web项目中的跨域问题解决方法
    浏览器的同源策略和跨域问题
    java中Scanner和random的用法
    mybatis的批量删除
    java中的异常理解
    事务回滚
    做人做事2个字:心、眼
    Linux下找不到so文件的解决办法
  • 原文地址:https://www.cnblogs.com/smwikipedia/p/1426125.html
Copyright © 2011-2022 走看看