Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:嵌套类的构造函数make";由于保护级别而无法访问”;_C#_.net_Class_Oop - Fatal编程技术网

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

C#:嵌套类的构造函数make";由于保护级别而无法访问”;,c#,.net,class,oop,C#,.net,Class,Oop,我有这段代码,并且生成了错误,仅仅因为我已经为它的类添加了构造函数 class NestedClass { class A { A() {} } class B { // no constructor } public static void run() { A a = new A(); // error B b = new B(); // no error } } 错误是: Nested

我有这段代码,并且生成了错误,仅仅因为我已经为它的类添加了构造函数

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
请帮我解释一下


谢谢:)

您的构造函数是私有的。类成员的默认访问修饰符为
private

   class A
   {
      A() {}
   }
这是正确的实现

   class A
   {
      public A() {}
   }

将构造函数定义为public

public class A
{
    public A() {}
}
public A() { }

将构造函数定义为public

public class A
{
    public A() {}
}
public A() { }
A
的构造函数是private

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


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

除非类是静态的,否则没有构造函数的类将被赋予 公共默认构造函数由C#编译器执行,以启用类实例化


将嵌套类
公开
,问题就会得到解决。您的run方法是公共的,但您要使用的类不是公共的,这会产生问题。

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

您需要指定,默认值为private,而在B的情况下,编译器为您提供了一个公共的无参数构造函数,因此您必须为
类a指定它

class A
{
    public A() { }
}

谢谢我来自java,所以我认为类成员的默认值是public:D@hqt,我认为在Java中默认值是
package
,它在包中是可见的。确实,您对构造函数的看法是正确的,它只需要是公共的。我的错误。