簡體   English   中英

錯誤:由於其保護級別而無法訪問

[英]Error: Inaccessible due to its protection level

這是來自MSDN的示例,該示例來自解釋“受保護”成員訪問修飾符的部分。 我的問題是,如果像示例II中那樣修改該程序,為什么會出現編譯錯誤,

例子一

class A
{
    protected int x = 123;
}

class B : A
{
    static void Main()
    {
        A a = new A();
        B b = new B();

        b.x = 10;
    }
}

例二

class A
{
    protected int x = 123;
}

//MODIFICATION IN BELOW 2 LINES
class B : A{}
class program
{
    static void Main()
    {
        A a = new A();
        B b = new B();

        b.x = 10;
    }
}

示例II的編譯器錯誤:

d:\MyProgs>csc _13protected.cs
Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
Copyright (C) Microsoft Corporation. All rights reserved.

_13protected.cs(14,15): error CS0122: 'A.x' is inaccessible due to its
        protection level
_13protected.cs(3,23): (Location of symbol related to previous error)

d:\MyProgs>

protected意味着它在類本身之外是不可見的,只有在類本身或派生類中才可見。

在您的第一個示例中,它起作用是因為您的main方法是派生類的一部分。

在第二個示例中,您試圖訪問其類之外的受保護成員,這是不可能的。 如果您想做到這一點,則應將x聲明為public

有關protected含義的更多信息,請參見http://msdn.microsoft.com/zh-cn/library/bcd5672a.aspx

閱讀訪問修飾符的定義,您將得到答案。

public:類型或成員可以被同一程序集或引用它的另一個程序集中的任何其他代碼訪問。

私有:類型或成員只能由相同類或結構中的代碼訪問。

protected:類型或成員只能由相同類或結構或從該類派生的類中的代碼訪問。

內部:類型或成員可以由同一程序集中的任何代碼訪問,但不能從另一個程序集訪問。

您需要注意發生實際訪問受保護字段的類。

在第二個示例中,您嘗試從程序類訪問bX,這是“ protected”修飾符所不允許的,因為程序類不繼承自A。

另一方面,在第一個示例中,對bX的實際訪問發生在B類中,該類繼承自A,因此“保護”修飾符允許訪問。

暫無
暫無

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

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