2017-05-06 121 views
-2

應該從基類繼承的類訪問基類的受保護成員嗎?C#:基類中的受保護方法;無法使用另一個類的派生類對象進行訪問

我試圖訪問使用派生類的一個對象從另一個類的基類的受保護的方法,但我收到此錯誤信息

the base class method is inaccessible due to protection level 

我在做什麼錯?

的Program.cs

class Program 
{ 
    static void Main(string[] args) 
    { 
     DerivedClass dc = new DerivedClass(); 
     dc.DisplayValue(); 

    } 
} 

BaseClass.cs

class BaseClass 
{ 
    private int value = 3; 

    protected void DisplayValue() 
    { 
     Console.WriteLine(this.value); 
    } 
} 

DerivedClass.cs

class DerivedClass : BaseClass{} 
+0

請參閱https://docs.microsoft.com/en-us/dotnet/articles/csharp/language-reference/keywords/protected –

回答

0

內DerivedClass該代碼訪問的BaseClass的受保護成員,但只通過DerivedClass類型或子類型的表達式。

您的主要功能是在派生類之外,這就是爲什麼你會得到例外。

從C#5規範的3.5.3節(重點煤礦):

保護實例成員,其中它被聲明的類的程序文本 之外訪問,並且當一個保護的內部 實例成員的程序在 程序文本中聲明它,訪問必須採取一個類中發生 聲明,從它爲d的類派生的外部訪問eclared。 此外,訪問需要通過派生類類型的實例 或由它構造的類類型進行。

您可以將代碼更改此例如使用基類

public class Program 
    { 
     public static void Main(string[] args) 
     { 
      DerivedClass dc = new DerivedClass(); 
      dc.Display(); 
     } 
    } 
    public class BaseClass 
    { 
     private int value = 3; 

     protected void DisplayValue() 
     { 
      Console.WriteLine(this.value); 
     } 
    } 
    public class DerivedClass : BaseClass 
    { 
     public void Display() 
     { 
      DisplayValue(); 
     } 
    } 
0

protected成員確實是從派生類可見的保護功能。但在你的例子中,你不能從派生類訪問DisplayValue。您可以從Program訪問它,其中不是派生自BaseClass。您需要讓該會員public

相關問題