C#:嵌套类的构造函数使得"由于保护级别而无法访问"

hqt*_*hqt 3 .net c# oop class

我有这段代码,并生成错误,因为我已经添加到其类的构造函数中.

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

   class B
   {
       // no constructor
   }

   public static void run()
   {
     A a = new A();  // error
     B b = new B(); // no error
   }
}
Run Code Online (Sandbox Code Playgroud)

错误是:

NestedExample.A is inaccessible due to protection level
Run Code Online (Sandbox Code Playgroud)

请帮我解释一下.

谢谢 :)

Ham*_*yan 7

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

   class A
   {
      A() {}
   }
Run Code Online (Sandbox Code Playgroud)

这是正确的实施

   class A
   {
      public A() {}
   }
Run Code Online (Sandbox Code Playgroud)

  • @hqt,我认为在Java中默认是`package`,它在包内可见参见[this](http://stackoverflow.com/questions/3530065/which-is-the-default-access-specifier-in -java) (2认同)

Hab*_*bib 6

将构造函数定义为public

public A() { }
Run Code Online (Sandbox Code Playgroud)

类的构造函数A私有的

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

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


它为B工作的原因是你没有指定任何构造函数和默认构造函数:

构造函数 - MSDN

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