【问题标题】:Inconsistent accessibility strange error可访问性不一致的奇怪错误
【发布时间】:2012-06-29 22:37:41
【问题描述】:

下面的这段代码让我对私有类的内部结构感到困惑。我可以看到很多关于这个错误的搜索结果,但下面的声音仍然很奇怪

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) 中却没有?

【问题讨论】:

  • 这还能编译吗?即使您删除了 NOK 代码
  • 在我的脑海中,我对其中任何一项工作感到惊讶。我什至不知道您可以拥有 private 类而不是嵌套类。编辑:是的,当然它不能编译(在 LINQPad 中测试)。你能发布实际代码吗?
  • stackoverflow.com/questions/4906546/… 也同意@ChrisSinclair
  • @V4Vendetta:是的,当我删除 (2) 和 sample1 声明时它会编译。
  • 奇怪的非以下答案提到私有类将无法如上所示工作:(

标签: c#


【解决方案1】:

它适用于 (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 被标记为私有,因此错误。所以这里没什么奇怪的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-20
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多