2012-06-28 51 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被标记为私有的,因此是错误的。这里没有什么奇怪的。