簡體   English   中英

受保護的函數無法在派生類中訪問

[英]Protected function not accessible in derived class

我正在制作一個簡單的C#控制台應用程序來測試繼承,但是當我添加2個新類並彼此繼承一個新類(Mammal:Animal)並在Program.cs類中創建哺乳動物對象時,即

Program.cs

Mammal mam = new Mammal();

mam.see(only public function are showing of animal not the protected member of function)

Animal.cs

class Animal
{
protected void check()
{}
public void see()
{}
}

哺乳動物

class Mammal:Animal
{
public void hair()
{}
}

無法弄清楚為什么不允許這樣做,因為受保護的對象如果在其層次結構中,則可以繼承。

Mammals的代碼可以訪問Animals受保護成員,但只能通過Mammals類型或子類型的表達式來訪問。

從類之外 (我認為是這樣),無法訪問受保護的成員。

根據C#5規范的第3.5.3節(強調我的):

當在聲明了該實例的類的程序文本之外訪問protected實例成員時,以及當在聲明該實例的程序的程序文本之外訪問protected internal實例成員時, 訪問必須在一個類內進行從聲明它的類派生的聲明 此外,需要通過該派生類類型的實例或從其構造的類類型的實例進行訪問。

(正如喬納森·賴因哈特(Jonathan Reinhart)指出的那樣,您幾乎肯定希望將這些類型稱為“ MammalAnimal ”。)

下面是訪問派生類中受保護方法的方法

     class Animal
     {
       protected void check()
       {}
       public void see()
       {}
     }

    class Mammal:Animal
    {
      public void CallSee()
        {
            Animal obja = new Animal();
            obja.see();
        }
    }

現在,您可以創建類哺乳動物和呼叫方法callSee的情況下,這將依次調用看到動物的方法。 如上所述,建議的成員在派生類之外是不可訪問的。 它只能在派生類中訪問

在主要功能中,編寫以下代碼。

    Static Main()
    {
      Mammal objm= new Mammal();
      objm.CallSee();
    }

只能從聲明類或其子類internal訪問protected訪問修飾符...僅publicinternal可以從外部訪問方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM