【发布时间】:2017-01-03 03:20:50
【问题描述】:
我尝试通过尽可能重用构造函数来节省代码并降低可维护性的故障率。现在,我遇到了一种情况,我认为我必须复制代码,但也许你知道一个解决方案。
public class Bar {
public List<string> BarList {
get;
private set;
}
public Bar() {
this.BarList = new List<string>();
}
public Bar(XmlNode node)
: this() {
//create from xml
}
}
public class Foo: Bar {
public List<int> FooList {
get;
private set;
}
public Foo()
: base() {
this.FooList = new List<int>();
}
public Foo(XmlNode node)
: base(node) {
//create from enhanced xml
}
}
每个以 XMLNode 作为参数的构造函数在初始化之前都会调用无参数构造函数。但是如何管理,派生类Foo调用自己的无参构造函数和带有基类XmlNode参数的构造函数呢?
构造函数链的期望行为是:
Foo(XmlNode)->Bar(XmlNode)->Foo()->Bar()
【问题讨论】:
-
您希望期望的行为是什么?我不清楚
-
只需调用 一个 构造函数来构造对象 ... 就足够了。如果需要,我认为
base(node)应该已经致电base()。 -
是 Foo 类和 Bar 类的区别只有 List
和 List (希望不是)。如果是这样,为什么不只上一节课 Foo<T>{ List<T> FooList} -
在这个问题上有很多微妙的变化。选择最佳答案将取决于您在 Bar(XmlNode) 构造函数中执行的操作。
-
Each constructor with XMLNode as parameter calls the parameterless constructor before for initialisation- 我没有看到Foo(XmlNode node)调用this()。这种事情不是通常用内部私有(或受保护的).Init()方法处理,所有构造函数都可以使用吗?
标签: c# .net oop inheritance constructor