我收到此错误:
由于其保护级别,'CTest.A.A()'无法访问。
编译此代码时:
public class A
{
private A()
{
}
}
public class B : A
{
public void SayHello()
{
Console.WriteLine("Hello");
}
}
任何人都可以解释原因吗?
答案 0 :(得分:14)
因为A的默认构造函数是private,所以请尝试protected A() {}
作为构造函数。
类B
会自动调用A
的默认构造函数,如果B
无法访问,或者没有默认构造函数(如果您有构造函数protected A(string s) {}
){{} 1}}无法正确实例化。
编译器会在B
B
public B() : base()
{
}
是对base()
的默认构造函数的实际调用。
答案 1 :(得分:4)
类B
上的构造函数(由编译器添加)需要在A
上调用默认(no-args)构造函数,但默认构造函数标记为private
,这意味着它只能在A
内调用,因此错误。
如果A
位于同一个程序集中,请将protected
上的构造函数更改为public
或internal
或B
。
答案 2 :(得分:2)
A的构造函数是私有的,无法从外部访问。如果要从外部创建A的实例,请将构造函数设置为public或protected。
答案 3 :(得分:1)
将private A()
更改为public A()
,您就可以了。
答案 4 :(得分:0)
这是因为A的构造函数是私有的,但B的构造函数是公共的。当你构造B(也构造A)时,无法访问A的私有构造函数。