標籤:des style blog color io os 使用 ar for
- 隱藏基類的方法
- 調用重寫或隱藏的基類方法
- 嵌套的類型定義
隱藏基類的方法
當從基類繼承一個(非抽象)成員時,也就繼承了其實現的代碼,如果繼承的成員是虛擬,就可以用Overrid重寫這段實現代碼,
無論繼承的成員是否為虛擬,都可以隱藏這些實現代碼,這在繼承的公用成員不像預期的那樣工作時,是很有用的,
隱藏1:使用New關鍵詞
public class MybaseClass { public void DoSomething() { Console.WriteLine("MybaseClassDoSomething"); } } public class MyDrivedClass : MybaseClass { new public void DoSomething() { Console.WriteLine("MyDrivedClassDoSomething"); } }
隱藏2:使用重寫方法
public class MybaseClass { public virtual void DoSomething1() { Console.WriteLine("MybaseClassDoSomething1"); } } public class MyDrivedClass : MybaseClass { public override void DoSomething1() { Console.WriteLine("MyDrivedClassDoSomething1"); } }
使用時需要注意這兩種方法的區別:
重寫的情況下,無論是使用基類的對象還是子類的對象 調用的都是重寫後的方法,
New關鍵詞的情況下,如果使用的是基類對象,調用的還是基類的方法,子類對象調用的是子類方法
可以看出執行個體化子類的時候都是先執行個體化基類 ,然後才執行子類的建構函式,最後是驗證了上面兩種隱藏方式的的區別。
調用重寫或隱藏的基類方法
無論是重寫成員還是隱藏成員,都可以在衍生類別內部訪問基類成員,這在許多情況下是很有用的,
例如:
- 要對衍生類別的使用者隱藏繼承的公用成員,但仍能在類中訪問其功能
- 要給繼承的虛擬成員添加實現代碼,而不是簡單的使用重寫的新代碼替換它
為此可以使用Base關鍵詞,它表示在衍生類別中的基類的實現代碼
嵌套的類型定義
除了在名稱空間中定義類以外還可以在其他類中定義這些類
public class MyClass { public class MyNestedClass { } }
使用方法:
CSharpRumenJD.MyClass.MyNestedClass mynestedclass = new MyClass.MyNestedClass();
C# 類成員備忘