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

C# 調(diào)用重寫(xiě)或隱藏的基類(lèi)方法

提問(wèn)人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-07

無(wú)論是重寫(xiě)成員還是隱藏成員,都可以在派生類(lèi)的內(nèi)部訪問(wèn)基類(lèi)成員。這在許多情況下都是很有用的,例如: 

    ?要對(duì)派生類(lèi)的用戶隱藏繼承的公共成員,但仍能在類(lèi)中訪問(wèn)其功能。

    ?要給繼承的虛擬成員添加實(shí)現(xiàn)代碼,而不是簡(jiǎn)單地用重寫(xiě)的新實(shí)現(xiàn)代碼替換它。

為此,可使用base關(guān)鍵字,它表示包含在派生類(lèi)中的基類(lèi)的實(shí)現(xiàn)代碼(在控制構(gòu)造函數(shù)時(shí),其用法是類(lèi)似的),例如:

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的基類(lèi)。因?yàn)閎ase使用的是對(duì)象實(shí)例,所以在靜態(tài)成員中使用它會(huì)產(chǎn)生錯(cuò)誤。


this關(guān)鍵字

    與base—樣,this也可以用在類(lèi)成員的內(nèi)部,且該關(guān)鍵字也引用對(duì)象實(shí)例。只是this引用的是當(dāng)前的對(duì)象實(shí)例(即不能在靜態(tài)成員中使用this關(guān)鍵字,因?yàn)殪o態(tài)成員不是對(duì)象實(shí)例的一部分)。

    this關(guān)鍵字最常用的功能是把當(dāng)前對(duì)象實(shí)例的引用傳遞給一個(gè)方法,如下例所示:

public void doSomething()

{

    MyTargetClass myObj = new MyTargetClass(); 

    myObj.DoSomethingWith(this);

}

    其中,被實(shí)例化的MyTargetClass實(shí)例(myObj)有一個(gè)DoSomethingWithO方法,該方法帶有一個(gè)參數(shù),其類(lèi)型與包含上述方法的類(lèi)兼容。這個(gè)參數(shù)類(lèi)型可以是類(lèi)的類(lèi)型、由這個(gè)類(lèi)繼承的類(lèi)類(lèi)型,或者由這個(gè)類(lèi)或 System.Object實(shí)現(xiàn)的一個(gè)接口。

    this關(guān)鍵字的另一個(gè)常見(jiàn)用法是限定局部類(lèi)型的成員,例如:

public class MyClass 

{

    private int someData;

    public int SomeData => this.someData;

許多開(kāi)發(fā)人員都喜歡這個(gè)語(yǔ)法,它可以用于任意成員類(lèi)型,因?yàn)榭梢砸谎劭闯鲆玫氖浅蓡T,而不是局部變量。

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

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