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

C# 隱藏基類方法

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

    當從基類繼承一個(非抽象的)成員時,也就繼承了其實現(xiàn)代碼。如果繼承的成員是虛擬的,就可以用override關鍵字重寫這段實現(xiàn)代碼。無論繼承的成員是否為虛擬,都可以隱藏這些實現(xiàn)代碼。這是很有用的,例如,當繼承的公共成員不像預期的那樣工作時,就可以隱藏它。

使用下面的代碼就可以隱藏:

public class MyBaseClass

{

    public void DoSomething()

    {

        // Base implementation.

    }

}

public class MyDerivedClass : MyBaseClass

{

    public void DoSomething()

    {

        // Derived class incrementation, hides base implementation.

    }

}

    盡管這段代碼可以正常運行,但它會生成一個警告,說明隱藏了一個基類成員。如果是無意間隱藏了—個需要使用的成員,此時就可以改正錯誤。如果確實要隱藏該成員,就可以使用new關鍵字顯式地表明意圖:

public class MyDerivedClass : MyBaseClass

{

    new public void DoSomething()

    {

        // Derived class implementation, hides base implementation.

    }

}

其工作方式是完全相同的,但不會顯示警告。此時應注意隱藏基類成員和重寫它們的區(qū)別??紤]下面的代碼:

public class MyBaseClass

{

    public virtual void DoSomething() => WriteLine("Base imp");

}

public class MyDerivedClass : MyBaseClass

{

    public override void DoSomething() => WriteLine("Derived imp");

}

其中重寫方法將替換基類中的實現(xiàn)代碼,這樣,下面的代碼就將使用新版本,即使這是通過基類類型進行的,情況也同樣如此(使用多態(tài)性):

MyDerivedClass myObj = new MyDerivedClass();

MyBaseClass myBaseObj; 

myBaseObj = myObj; 

myBaseObj.DoSomething();

結果如下:

Derived imp

另外,還可以使用下面的代碼隱藏基類方法:

public class MyBaseClass

{

    public virtual void DoSomething() => WriteLine("Base imp">;

}

public class MyDerivedClass : MyBaseClass 

{

    new public void DoSomething() => WriteLine("Derived imp");

}

基類方法不必是虛擬的,但結果是一樣的,只需要修改上面代碼中的一行即可。對于基類的虛擬方法和非虛擬方法而言,其結果如下:

    Base imp

盡管隱藏了基類的實現(xiàn)代碼,但仍可以通過基類訪問它。

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

相關視頻回答
回復(0)
返回頂部