簡體   English   中英

為什么我因“保護級別”錯誤而“無法訪問”?

[英]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上的構造函數更改為protectedpublic ,或者更改為internal

A的構造函數是私有的,不能從外部訪問。 如果要從外部創建A的實例,請將構造函數設置為public或protected。

private A()更改為public A() ,你很高興。

這是因為A的構造函數是私有的,但B的構造函數是公共的。 當你構造B(也構造A)時,無法訪問A的私有構造函數。

暫無
暫無

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

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