3

我有这段代码,并产生了错误,只是因为我已经为它的类添加了一个构造函数。

class NestedClass
{
   class A
   {
      A() {}
   }

   class B
   {
       // no constructor
   }

   public static void run()
   {
     A a = new A();  // error
     B b = new B(); // no error
   }
}

错误是:

NestedExample.A is inaccessible due to protection level

请帮我解释一下。

谢谢 :)

4

6 回答 6

7

你的构造函数是private. 类成员的默认访问修饰符是private.

   class A
   {
      A() {}
   }

这是正确的实现

   class A
   {
      public A() {}
   }
于 2012-12-28T10:35:29.550 回答
6

将您的构造函数定义为公共

public A() { }

您的类构造函数A私有的

私有构造函数(C# 编程指南)- MSDN

请注意,如果您不将访问修饰符与构造函数一起使用,则默认情况下它仍然是私有的。


它适用于 B 的原因是您没有指定任何构造函数和默认构造函数:

构造函数 - MSDN

除非类是静态的,否则 C# 编译器会为没有构造函数的类提供 公共默认构造函数,以启用类实例化

于 2012-12-28T10:35:36.760 回答
3

将构造函数定义为 public

public class A
{
    public A() {}
}
于 2012-12-28T10:35:29.883 回答
3

您的 A 构造函数是私有的。它不能从 A 外部访问。同时,B 根本没有构造函数,因此获得了默认的公共构造函数。

于 2012-12-28T10:36:42.067 回答
1

您需要指定,默认一个是私有的,而在 B 的情况下,编译器为您提供了一个公共的无参数构造函数,因此您必须为class A

class A
{
    public A() { }
}
于 2012-12-28T10:37:12.457 回答
0

制作嵌套类public,问题将得到解决。您的 run 方法是公开的,但您要使用的类不是公开的,这会带来问题。

于 2012-12-28T10:36:32.720 回答