因为我们知道构造函数不是像我在上一个问题中提到的那样在子类中继承的Click here to view question
我写了代码
namespace TestConscoleApplication
{
abstract public class A
{
public int c;
public int d;
private A(int a, int b)
{
c = a;
d = b;
}
public virtual void Display1()
{
Console.WriteLine("{0}{1}", c, d);
}
}
internal class B : A
{
protected string Msg;
public B(string Err)
{
Msg = Err;
}
public void Display()
{
Console.WriteLine(Msg);
}
}
class Program
{
static void Main(string[] args)
{
B ObjB = new B("Hello");
Console.ReadLine();
}
}
}
当我编译代码时显示错误
由于其保护级别,错误
TestConscoleApplication.A.A(int, int)
无法访问。
然后为什么会出现错误。
答案 0 :(得分:4)
通过使A
私有的仅构造函数,您已阻止派生类能够在A
之外构建。
答案 1 :(得分:1)
派生类构造函数始终调用基础构造函数(其中之一)。使其私密,您禁止从外部访问它。换句话说,你无法在A之外创建A的实例。
由于您创建了构造函数,因此编译器不会为您生成此类的默认公共版本。
如果您想从班级后代而不是从外部提供访问权限,则应将其设为受保护。
答案 2 :(得分:0)
您需要A
的构造函数可供B
访问,并使用它。此外,默认基础构造函数是base()
(即无参数构造函数),A
上不存在。这是解决此问题的一种方法(删除了非必要位):
abstract public class A
{
protected A(int a, int b)
{
}
}
internal class B : A
{
public B(int a, int b, string Err)
: base(a, b)
{
}
}
答案 3 :(得分:-1)
构造函数不应该是私有的,否则你将无法创建该类的实例,也无法继承它,但如果你想创建一个私有构造函数,也可以使用它创建一个公共构造函数。 有关详细信息Go here