[英]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)指出的那樣,您幾乎肯定希望將這些類型稱為“ Mammal
和Animal
”。)
下面是訪問派生類中受保護方法的方法
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
訪問修飾符...僅public
和internal
可以從外部訪問方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.