天天看點

C#遇到 錯誤:不可通路,因為它具有一定的保護級别

錯誤原因:

通路級别限制。顯然是因為類或者類成員的通路權限不夠引起的。

這裡不得不提一下C#中的預設通路修飾符

  • 一、結構體中成員的預設通路級别為private,如果想要通路這個結構體裡的成員,需要添加修飾public,否則會無法通路的錯誤;
    C#遇到 錯誤:不可通路,因為它具有一定的保護級别
  • 二、類、結構、接口、委托預設為internal。

    internal 是指 同一程式集中的任何代碼都可以通路該類型或成員,但其他程式集不可以通路。

這句話是指:

我在同一個cs檔案裡裡定義一個 struct,那麼我在這個cs裡的所有函數中,都能通路這個類;

在同一個程式集下(姑且看成在同一個檔案夾),這個類也可以被通路到;

C#遇到 錯誤:不可通路,因為它具有一定的保護級别

如上,Common.cs和Program.cs就在同一程式集下,是以能夠互相通路類,即使沒有添加public

反之,如果不在同一個程式集中,

C#遇到 錯誤:不可通路,因為它具有一定的保護級别

如上,一個工程下有兩個C#的程式集,如果我在

Program.cs

想通路

CommonStruct.cs

中的類成員,

除了要增加

外,還需要在

CommonStruct.cs

的類中增加public修飾

C#遇到 錯誤:不可通路,因為它具有一定的保護級别

否則就會報

CS0122 “CommonStruct”不可通路,因為它具有一定的保護級别 
           

最後補充一下各種修飾符能通路的權限

  • public:程式集及引用的程式集,都能通路修改。
  • internal:隻能同一程式集通路。
  • protected:類及派生類能夠通路。
  • protected internal:成員可由任何嵌套類型、任何派生類型(不管在什麼程式集)或者定義程式集中的任何方法通路。
  • private:隻能類自己通路。

這裡對 protected internal:還有一些疑問,不過在

https://www.cnblogs.com/hshuai/p/3586007.html這篇部落格中找到了

protected internal 和 internal 的差別

  • 命名空間相同時: protected internal=internal;
  • 命名空間不同時: protected internal=protected;;

繼續閱讀