嵌套类的构造函数由于保护级别的原因使得"不可访问

本文关键字:quot 访问 构造函数 于保护 保护 嵌套 | 更新日期: 2023-09-27 17:49:40

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

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。类成员的默认访问修饰符是private

   class A
   {
      A() {}
   }

这是正确的实现

   class A
   {
      public A() {}
   }

将构造函数定义为public

public A() { }

A类的构造函数是private

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

注意,如果构造函数没有使用访问修饰符


它对B有效的原因是你没有指定任何构造函数,对于默认构造函数:

构造函数- MSDN

除非类是静态的,否则没有构造函数的类将被赋值为c#编译器将公共默认构造函数设置为启用类实例化

定义构造函数为public

public class A
{
    public A() {}
}

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

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

class A
{
    public A() { }
}

将您的嵌套类设置为public,问题将得到解决。你的run方法是公共的,但是你想使用的类不是公共的,这会产生问题。

相关文章: