【发布时间】:2018-06-03 00:32:11
【问题描述】:
public class A
{
public A() { Console.WriteLine("A parameterless"); }
public A(int a) : this() { Console.WriteLine("A with a"); }
}
public class B : A
{
public B() { Console.WriteLine("B paramterless"); }
public B(int b) : base(b) { Console.WriteLine("B with b"); }
}
public class Program
{
public static void Main(string[] args)
{
new B(3);
}
}
给予:
无参数
一个有一个
B 与 b
我还能做些什么来调用“B 无参数”?
所以,我需要一些类似的东西:
public B(int b) : base(b), this() { ... }
或者,一个虚拟构造函数,这样当基类调用this()时,它会重定向到子类的无参数构造函数。
【问题讨论】:
-
你不能。您可以选择 一个 其他构造函数来链接。如果问题不那么抽象,并且我们知道您实际在做什么(除了将调试信息打印到控制台之外),我们可能会有具体的建议来更好地解决问题。
-
你不能,你只能通过构造函数创建一个直接链,而不是一个构造函数然后返回到另一个构造函数。因此,您可以创建从 B(int) 到 B(),然后到 A() 或 A(int) 的链。如果你想去 B(int)->B()->A(int) 你已经失去了 int 因为 B(int) 中的代码还没有执行。虚拟构造函数不是 C# 语言的一部分。您应该详细说明您要解决的问题,因为可能有其他方法可以解决它。
-
... 但是有一个解决方法:您可以在
B()和B(int b)中调用私有方法 -
@Fildor 确实如此,但是如果您尝试将值分配给这些方法中不可能的只读字段。同样,我们需要更多有关潜在问题的信息,以便提出好的解决方案。
-
@LasseVågsætherKarlsen 是的,这是一个缺点。这就是 Damien 的评论在 “如果问题不那么抽象并且我们知道您实际在做什么 [...] 我们可能会就如何更好地解决问题提出具体建议”
标签: c# .net inheritance constructor virtual