标题可能有些令人困惑。
我想要在一个构造函数内部调用相同类的构造函数以及基类的构造函数。也许我的第一次尝试可以解释我的问题:
public MyClass(MyClass obj) : base(obj),this() {}
但是那个记号没用。有什么解决方案可以解决它吗?
标题可能有些令人困惑。
我想要在一个构造函数内部调用相同类的构造函数以及基类的构造函数。也许我的第一次尝试可以解释我的问题:
public MyClass(MyClass obj) : base(obj),this() {}
但是那个记号没用。有什么解决方案可以解决它吗?
不行,你不能这样做,原因如下:
当一个构造函数调用其基类的构造函数时,后者的调用是该构造函数的一部分。因此,你不能调用同一类的另一个构造函数以及基类的构造函数,因为前者的调用已经包含了对基类构造函数的调用 - 你不能初始化基类两次。
C#允许使用base(...)或this(...),因为每个构造函数最终都必须调用一个超类构造函数。因此,如果同时调用base()和this(),将会有两个超类构造函数的调用,这是基本上不正确的。
这也是为什么不能两次调用base(...)的原因。
MyClass
的无参构造函数调用base(obj)
。但如果你不总是想这样做,那么我认为没有好的方法。
也许你可以尝试在这些构造函数中移动一些内容。你能否发布更多关于这些构造函数实际发生了什么的信息?private int foo_ = 41;
这解决了许多使用其他构造函数的问题。
实际上,你是可以这样做的, 你可以从子类实例中调用父类构造函数,以下是具体方法:
public class Person
{
public Person(int age) {
this.Age = age;
}
public int Age;
}
public class students :Person
{
public students(string name, int age) :base(age )
{
this.studentName = name;
this.Age = age;
}
public string studentName;
}
this()
)指定了不同的基类构造函数(如果未指定,则隐式指定为无参数构造函数),那么应该调用哪个基类构造函数? - Damien_The_Unbeliever