C# 調(diào)用重寫或隱藏的基類方法
無論是重寫成員還是隱藏成員,都可以在派生類的內(nèi)部訪問基類成員。這在許多情況下都是很有用的,例如:
?要對派生類的用戶隱藏繼承的公共成員,但仍能在類中訪問其功能。
?要給繼承的虛擬成員添加實現(xiàn)代碼,而不是簡單地用重寫的新實現(xiàn)代碼替換它。
為此,可使用base關(guān)鍵字,它表示包含在派生類中的基類的實現(xiàn)代碼(在控制構(gòu)造函數(shù)時,其用法是類似的),例如:
public class MyBaseClass
{
public virtual void DoSomething()
{
// Base implementation.
}
}
public class MyDerivedClass : MyBaseClass
{
public override void DoSomething()
{
//Derived class implementation, extends base class implementation.
base.DoSomething();
// More derived class implementation.
}
}
這段代碼在MyDerivedClass包含的DoSomething()方法中,執(zhí)行包含在MyBaseClass中的DoSomething()版本,MyBaseClass是MyDerivedClass的基類。因為base使用的是對象實例,所以在靜態(tài)成員中使用它會產(chǎn)生錯誤。
this關(guān)鍵字
與base—樣,this也可以用在類成員的內(nèi)部,且該關(guān)鍵字也引用對象實例。只是this引用的是當前的對象實例(即不能在靜態(tài)成員中使用this關(guān)鍵字,因為靜態(tài)成員不是對象實例的一部分)。
this關(guān)鍵字最常用的功能是把當前對象實例的引用傳遞給一個方法,如下例所示:
public void doSomething()
{
MyTargetClass myObj = new MyTargetClass();
myObj.DoSomethingWith(this);
}
其中,被實例化的MyTargetClass實例(myObj)有一個DoSomethingWithO方法,該方法帶有一個參數(shù),其類型與包含上述方法的類兼容。這個參數(shù)類型可以是類的類型、由這個類繼承的類類型,或者由這個類或 System.Object實現(xiàn)的一個接口。
this關(guān)鍵字的另一個常見用法是限定局部類型的成員,例如:
public class MyClass
{
private int someData;
public int SomeData => this.someData;
許多開發(fā)人員都喜歡這個語法,它可以用于任意成員類型,因為可以一眼看出引用的是成員,而不是局部變量。
點擊加載更多評論>>