錯誤原因:
通路級别限制。顯然是因為類或者類成員的通路權限不夠引起的。
這裡不得不提一下C#中的預設通路修飾符
- 一、結構體中成員的預設通路級别為private,如果想要通路這個結構體裡的成員,需要添加修飾public,否則會無法通路的錯誤;
-
二、類、結構、接口、委托預設為internal。
internal 是指 同一程式集中的任何代碼都可以通路該類型或成員,但其他程式集不可以通路。
這句話是指:
我在同一個cs檔案裡裡定義一個 struct,那麼我在這個cs裡的所有函數中,都能通路這個類;
在同一個程式集下(姑且看成在同一個檔案夾),這個類也可以被通路到;
如上,Common.cs和Program.cs就在同一程式集下,是以能夠互相通路類,即使沒有添加public
反之,如果不在同一個程式集中,
如上,一個工程下有兩個C#的程式集,如果我在
Program.cs
想通路
CommonStruct.cs
中的類成員,
除了要增加
外,還需要在
CommonStruct.cs
的類中增加public修飾
否則就會報
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;;