2012-06-28 79 views
-1

我有下面這段代碼,這讓我迷惑了一個私人類的內部。我可以看到這個錯誤許多搜索結果,仍低於聽起來怪異不一致的可訪問性奇怪的錯誤

namespace X 
{ 
    public class Program 
    { 
     public static XYZ sample1; 
     public static void Main(string[] args) 
     { 
      XYZ sample2 = new XYZ(); // OK (1) 
      sample1 = new XYZ(); // NOK (2) 
        ... 
     } 
    } 

    private class XYZ 
    { 

    } 
} 

如果類XYZ是私有的,它是如何工作(1),但不是在(2)?

+2

這是否甚至編譯?即使你刪除了你的* NOK *代碼 – V4Vendetta

+3

關閉我的頭頂,我很驚訝這些工作。我甚至不知道你可以有一個'private'類而不是嵌套類。編輯:是的,當然,它不會編譯(在LINQPad中測試)。你可以發佈_actual_代碼嗎? –

+0

http://stackoverflow.com/questions/4906546/concept-of-private-class-in-c-sharp與@ChrisSinclair太 – dash

回答

3

它工作在兩種(1)和(2):

// OK, you declare and assign a local variable of a known type 
XYZ sample2 = new XYZ(); 

// OK, you assign a static field of a known type 
sample1 = new XYZ(); 

你不能聲明public static XYZ sample1;可言,因爲它是公共場合XYZ是私人:

// This won't compile if XYZ is private 
public static XYZ sample1; 

這是有道理的,的X.Program用戶將有機會獲得它的公共成員(在這種情況下sample1),但它們將不能夠使用它們,因爲XYZ是私有的組件(再不敢訪問)。這就是爲什麼編譯器說「不一致的可訪問性」。

2

這是因爲你被暴露

public static XYZ sample1; 

成員是從「X」的命名空間之外的其他代碼可見。但是類XYZ被標記爲私有的,因此是錯誤的。這裏沒有什麼奇怪的。