不一致的可访问性奇怪的错误

时间:2012-06-28 11:57:58

标签: c#

我在下面这段代码让我对私人课程的内部感到困惑。我可以看到很多关于此错误的搜索结果,下面仍然听起来很奇怪

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 个答案:

答案 0 :(得分: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是私有的装配(然后无法访问)。这就是编译器说“不一致的可访问性”的原因。

答案 1 :(得分:2)

因为你正在暴露

public static XYZ sample1;
成员。但类XYZ被标记为私有,因此错误。所以这里没什么奇怪的。