[英]why i am getting error 'ObjectPoolingManager.Instance' is inaccessible due to its protection level?
[英]Why am I getting an “inaccessible due to protection level” error?
我收到此錯誤:
由於其保護級別,'CTest.AA()'無法訪問。
編譯此代碼時:
public class A
{
private A()
{
}
}
public class B : A
{
public void SayHello()
{
Console.WriteLine("Hello");
}
}
有誰能解釋為什么?
因為A的默認構造函數是private,所以嘗試使用protected A() {}
作為構造函數。
如果B
無法訪問或者沒有默認構造函數(如果你有構造函數protected A(string s) {}
) B
無法正確實例化,則B
類自動調用A
的默認構造函數。
編譯器在B
自動生成以下默認構造函數
public B() : base()
{
}
其中base()
是對A
的默認構造函數的實際調用。
類B
上的構造函數(由編譯器添加)需要在A
上調用默認(no-args)構造函數,但是默認構造函數被標記為private
,這意味着它只能在A
調用,因此錯誤。
如果B
在同一個程序集中,則將A
上的構造函數更改為protected
或public
,或者更改為internal
。
A的構造函數是私有的,不能從外部訪問。 如果要從外部創建A的實例,請將構造函數設置為public或protected。
將private A()
更改為public A()
,你很高興。
這是因為A的構造函數是私有的,但B的構造函數是公共的。 當你構造B(也構造A)時,無法訪問A的私有構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.