C#:重載、重寫、隱藏的定義


1. 繼承的類型:

  • 實現繼承:表示一個類型派生於一個基類型,擁有該基類型的所有成員字段和函數。派生類型的每個函數采用基類型的實現代碼,除非在派生類型的定義中指定重寫該函數的實現代碼。
  • 借口繼承:表示一個類型之繼承了函數的簽名,沒有繼承任何實現代碼。

2. 多重繼承

C#不支持多重實現繼承,允許類型派生於多個接口。

3. 虛方法

把一個基類函數聲明為virtual,該函數就可以在派生類中重寫。

4. 隱藏方法

如果簽名相同的方法在基類和派生類中都進行了聲明,但該方法沒有聲明為virtual和override,派生類方法就會隱藏基類方法。

C#中使用關鍵字new聲明我們要隱藏一個方法:

class MyDerivedClass : HisBaseClass
{
public new int MyGroovyMethod()
{
// some groovy implementation
return 0;
}
}

重載、重寫、隱藏的定義:

  • 重載:同一個作用域內發生(比如一個類里面),定義一系列同名方法,但是方法參數列表不同。通過傳遞不同的參數來決定調用哪一個方法。
  • 重寫:繼承時發生,在子類中重新定義父類中的方法。例如:基類方法聲明為virtual方法,派生類中使用override聲明此方法的重寫。
  • 隱藏:基類方法不做聲明(默認為非虛方法),在派生類中使用new聲明方法的隱藏

重載時,根據參數選擇調用方法;

重寫時,訪問父類、子類皆調用子類的重寫方法;

隱藏式,訪問父類調用父類的方法,訪問子類則調用子類的方法。

比如父類A,有個方法標記為virtual,a(){}   子類B繼承A,也聲明一個方法a(){}   如果B里面的a()使用override,那么訪問A的方法時實際上調用了B里面聲明的方法,相當於A的方法被覆蓋了,new就不是,訪問A的a還是A里面定義的方法,訪問B就是B里面定義的方法.

其他關於virtual和override修飾符的重要信息:

  • 重寫和被重寫的方法必須有相同的可訪問性。
  • 不能重寫static 方法或非虛方法
  • 方法、屬性、索引以及事件,都可以被聲明為virtual和override

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM