2014年1月28日 星期二

C# - abstract、virtual、override、new的差異性

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

1. 常用的中文名稱:
  • abstract => 抽象方法。
  • virtual => 虛擬方法。
  • override => 覆蓋基礎類別方法。
  • new => 隱藏基礎類別方法。
override 和 new 有時都叫覆寫基礎類別方法。

2. 適用場合:
  • abstract 和 virtual 用在基礎類別(父類別)中
  • override 和 new 用在派(衍)生類別(子類別)中。
3. 具體概念:
  • abstract 抽象方法,是空的方法,沒有方法實體,派(衍)生類必須以 override 實現此方法。
  • virtual 虛擬方法,若希望或預料到基礎類別的這個方法在將來的派(衍)生類別中會被覆寫(override 或 new),則此方法必須被聲明為 virtual。
  • override 覆寫繼承自基礎類別的virtural方法,基礎類別方法調用不到。
  • new 隱藏繼承自基礎類別的virtual方法。
  • 當派(衍)生類別中出現與基礎類別同名的方法,而此方法前面未加 override 或 new 修飾符時,編譯器會報警告,但不報錯,真正執行時等同於加了new。


3. abstract 和 virtual 的區別:
  • abstract 方法還沒實現,連累着基礎類別也不能被實例化,除了作為一種規則或符號外沒啥用;virtual 則比較好,派(衍)生類別想覆寫就覆寫,不想覆寫跑原始的。
  • 而且繼承是少用為妙,繼承層次越少越好,派(衍)生類別新擴展的功能越少越好,virtual 深合此意

4. override 和 new 的區別:


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


  • 作為派(衍)生類別類型調用,則是執行 override 或 new 之後的。
-雲遊山水為知已逍遙一生而忘齡- 電腦神手

沒有留言:

張貼留言