zoukankan      html  css  js  c++  java
  • [C#] 區分 abstract、virtual、override 和 new

    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的前面了... 

  • 相关阅读:
    【scrapy windows环境下安装遇到的问题】
    关于python中try,except,else,finaly的使用说明:
    【转】简单介绍Python中的try和finally和with方法
    [python]请利用@property给一个Screen对象加上width和height属性,以及一个只读属性resolution:
    利用闭包返回一个计数器函数,每次调用它返回递增整数:
    把“数字的字符串”转换成“整数”时遇到的小麻烦
    图像识别sift+bow+svm
    自己重装系统原来如此简单
    OLTPBenchmark教程以及workload自动生成
    windows系统快速安装pytorch的详细教程
  • 原文地址:https://www.cnblogs.com/porter/p/5881942.html
Copyright © 2011-2022 走看看