abstract、virtual、override和new是在類別的繼承關係中常用的四個修飾方法的關鍵字,在此略作總結。

1. 常用的中文名稱:

n   abstract => 抽象方法。

n   virtual => 虛擬方法。

n   override => 覆蓋基礎類別方法。

n   new => 隱藏基礎類別方法。

n   override 和 new 有時都叫覆寫基礎類別方法。

2. 適用場合:

n   abstract 和 virtual 用在基礎類別(父類別)中

n   override 和 new 用在派(衍)生類別(子類別)中。

3. 具體概念:

n   abstract 抽象方法,是空的方法,沒有方法實體,派(衍)生類必須以 override 實現此方法。

n   virtual 虛擬方法,若希望或預料到基礎類別的這個方法在將來的派(衍)生類別中會被覆寫(override 或 new),則此方法必須被聲明為 virtual。

n   override 覆寫繼承自基礎類別的virtural方法,可以理解為拆掉老房子,在原址上建新房子,老房子再也找不到了(基礎類別方法永遠調用不到了)。

n   new 隱藏繼承自基礎類別的virtual方法,老房子還留着,在旁邊蓋個新房子,想住新房子的住新房子(作為衍生類別對象調用),想住老房子住老房子(作為基礎類別對象調用)。

n   當派(衍)生類別中出現與基礎類別同名的方法,而此方法前面未加 override 或 new 修飾符時,編譯器會報警告,但不報錯,真正執行時等同於加了new。

3. abstract 和 virtual 的區別:

n   abstract 方法還沒實現,連累着基礎類別也不能被實例化,除了作為一種規則或符號外沒啥用;virtual 則比較好,派(衍)生類別想覆寫就覆寫,不想覆寫就吃老子的。

n   而且繼承再好也是少用為妙,繼承層次越少越好,派(衍)生類別新擴展的功能越少越好,virtual 深合此意。

4. override 和 new 的區別:

n   當派(衍)生類別對象作為基類類型使用時,override 的執行派(衍)生類別方法,new 的執行基礎類別方法。

n   如果作為派(衍)生類別類型調用,則都是執行 override 或 new 之後的。

http://jimmy0222.pixnet.net/blog/post/37271702-%5Bc%23%5D-%E5%8D%80%E5%88%86-abstract%E3%80%81virtual%E3%80%81override-%E5%92%8C-new

====转载, 很久没有跟踪C#语言了,没想到new又多了一个新作用....  在语法层面,看来是走在java的前面了...

[C#] 區分 abstract、virtual、override 和 new的更多相关文章

  1. knowing abstract,virtual,override,new

    If a class has at least one member which modified by "abstract",this class is an abstract ...

  2. C# abstract virtual override new finally java final finalize

    virtual:声明虚方法.可以被其派生类所重写的.重写方法需要使用override或者new关键字. override:覆盖原方法.可对重写virtual.override.abstract进行重写 ...

  3. C# [method Modifiers] abstract virtual override new

    abstract :表示方法是抽象方法,在子类中必须重写.抽象方法所在的类必须是抽象类,即用abstract modifiers:virtual:表示此方法是virtual方法,除了在子类中可以重写外 ...

  4. abstract,virtual,override个人

    1.abstract 可以修饰类和方法,修饰方法时只声明不实现: 2.继承实现abstract类必须通过override实现abstract声明的方法,而virtual方法可选择override(重写 ...

  5. abstract,virtual,override

    1.abstract 可以修饰类和方法,修饰方法时只声明不实现: 2.继承实现abstract类必须通过override实现abstract声明的方法,而virtual方法可选择override(重写 ...

  6. sealed、new、virtual、abstract与override 趣解

    1. sealed——“断子绝孙” 密封类不能被继承.密封方法可以重写基类中的方法,但其本身不能在任何派生类中进一步重写.当应用于 方法或属性时,sealed修饰符必须始终与override一起使用. ...

  7. Modifiers: virtual, override, new, abstract, sealed, internal

    internal 声明类.类成员.接口或接口成员具有内部可见性. internal 修饰符使类.接口或成员仅在当前包中可见. 当前包之外的代码不能访问 internal 成员.只有在同一程序集的文件中 ...

  8. sealed、new、virtual、abstract与override 总结

    1. sealed——“断子绝孙” 密封类不能被继承.密封方法可以重写基类中的方法,但其本身不能在任何派生类中进一步重写.当应用于方法或属性时,sealed修饰符必须始终与override一起使用. ...

  9. abstract、override、new、virtual、sealed使用和示例

    abstract修饰类名为抽象类,修饰方法为抽象方法.如果一个类为抽象类,则这个类智能是其他某个类的基类.抽象方法在抽象类中没有函数体.抽象类中的抽象方法是没有方法体的,继承其的子类必须实现抽象类的抽 ...

随机推荐

  1. iTween基础之iTweenPath(自定义路径移动)

    在游戏开发中经常会用到让一个游戏对象按照指定的路线移动,iTweenPath就提供了可视化的编辑路径功能. iTweenPath 下载地址: http://download.csdn.net/deta ...

  2. Delphi 调试日子 - TLogger

    这段时间又开始用delphi了,才发现我对它这么的不熟悉! 简单的而有效的调试工具 Logger 这个是“榕树下”的作品,小巧而精悍.稍微调整了一下.在需要的地方加入 {$IFDEF DEBUG}   ...

  3. 使用usb+preseed在virtualbox上安装ubuntu(一)

    1.制作usb boot盘,在ubuntu上使用startup disk creater将ubuntu-server12.04.iso写入到usb中: 2.修改syslinux文件夹中的syslinu ...

  4. iOS 自定义导航栏 和状态栏

    一.更改状态栏颜色 (StatusBar) 就是比如导航栏是红色的状态栏是绿色的. 要实现这样的效果其实很简单,就是添加一个背景view. 简单的实现过程如下: 1 // 设置导航颜色 可用 2 [s ...

  5. 用sql语句生成 数据字典

    SELECT 表名=case when a.colorder=1 then d.name else '' end, 表说明=case when a.colorder=1 then isnull(f.v ...

  6. Careercup - Google面试题 - 5727310284062720

    2014-05-06 14:04 题目链接 原题: given an 2D matrix M, is filled either using X or O, you need to find the ...

  7. css3动画实例

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  8. 删除vlan的方法

    方法一: 删除VLAN     先删接口     switch(config)#int ra f0/1 - 5     switch(config-if)#no switchport access v ...

  9. hdu 3046 Pleasant sheep and big big wolf 最小割

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3046 In ZJNU, there is a well-known prairie. And it a ...

  10. BZOJ1565 植物大战僵尸

    AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=1565 这题看上去并不会做,结果又是最大权闭合子图的裸题. 于是就去看了一发论文,明白建图的 ...