标题可能听起来令人困惑。 我想要的是在构造函数中调用相同类的构造函数和基类的构造函数。 也许我的解决可能解释我的问题第一次尝试:构造函数中的调用基构造函数和其他构造函数
public MyClass(MyClass obj) : base(obj),this() {}
但是符号不工作。 有没有解决方案来解决这个问题?
标题可能听起来令人困惑。 我想要的是在构造函数中调用相同类的构造函数和基类的构造函数。 也许我的解决可能解释我的问题第一次尝试:构造函数中的调用基构造函数和其他构造函数
public MyClass(MyClass obj) : base(obj),this() {}
但是符号不工作。 有没有解决方案来解决这个问题?
不,你不能,原因如下做到这一点:
当一个构造函数调用它的基础的构造函数,后者调用是有问题的构造的一部分。所以,你不能调用同一个类的另一个构造和基类的构造函数,因为前者的呼叫已经包含到基本构造函数的调用 - 你不能初始化你的基地两次
您可以简单地将构造函数代码复制到给定的构造函数中。或者从默认的构造函数和这个构造函数中调用一个特殊的setup()函数。
感谢您的信息。是的,这是我考虑的解决方案。但我希望可能有一种解决方案,比如在构造函数中调用base()和this(),就像在例如可能的情况下一样。 Java的。 – Kai 2011-06-16 07:16:42
这种没有技术解决方案,需要一个解决办法,将逻辑被默认的构造函数,使基地在你的超一流的呼叫比重写虚函数。
在构造函数中调用虚拟方法通常不是很好的风格。 – leppie 2011-06-16 07:18:35
你的意思是“让基类调用什么东西”,或者“做点基调”?另外,为什么要覆盖基类内的虚函数?虚拟函数将在子类中被覆盖。 – 2011-06-16 07:18:38
调用虚拟方法不是解决此问题的好方法。参见: http://blogs.msdn.com/b/ericlippert/archive/2008/02/18/why-do-initializers-run-in-the-opposite-order-as-constructors-part-two.aspx 和埃里克的评论2008年2月18日下午6:50 – thekip 2011-06-16 07:21:27
在C#中,你还可以在声明中为每个成员提供一个缺省初始化:
private int foo_ = 41;
这解决了许多用其他构造函数的问题。
一种方法是使MyClass
的无参数构造函数调用base(obj)
。但是,如果你不总是想这样做,比我认为没有一个好方法。
也许你可以尝试在这些构造函数中移动东西。你能发布更多关于这些构造函数实际发生的信息吗?
这是为了实现复制构造函数。这样我可以调用无参数构造函数的“默认东西”,并可以调用基础构造函数。 – Kai 2011-06-16 07:19:17
你不能把无参数构造函数的“默认东西”放在底部吗?或者只是将它复制到其他构造函数? – 2011-06-16 07:24:49
其实,你可以这样做, 可以火从子类的实例父类的构造,这里是你如何做到这一点:
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;
}
现在,假设你正在创建学生对象类, 所以,你会做到这一点:
学生STD =新的学生( “杰克”,23);
这将发送“杰克”学生类的构造函数,并且23将通过被发送到人的构造函数:基地(年龄)
希望这有助于, 干杯。
如果你的参数的构造函数('这个()')指定一个不同的基类的构造函数(它隐含那样 - 参的一个 - 如果没有指定)。应该调用哪个基类构造函数? – 2011-06-16 07:20:18