位置:首頁 > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# 調(diào)用重寫或隱藏的基類方法

提問人:劉團圓發(fā)布時間:2020-12-07

無論是重寫成員還是隱藏成員,都可以在派生類的內(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ā)人員都喜歡這個語法,它可以用于任意成員類型,因為可以一眼看出引用的是成員,而不是局部變量。

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部