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
,它在包中是可见的。确实,您对构造函数的看法是正确的,它只需要是公共的。我的错误。