我有一个抽象基类,从它派生出两个类。抽象类有一个受保护的字段,由派生类中的构造函数进行初始化。每个派生类都有两个构造函数,第一个构造函数初始化字段,第二个构造函数通过调用第一个构造函数修改第一个构造函数的初始化。两个派生类的第二个构造函数完全相同,但是第一个构造函数在两个派生类之间是不同的。是否有一种方法将第二个构造函数放在基类中?
以下是一个例子来说明我的意思:
我想做的是找到一种方法,不必重复两次“body Y”。我考虑将
对我来说,这听起来很愚蠢。虽然我不确定,但我有这样的感觉:从基类调用派生类的内容只能在运行时完成,无法在编译时检查。我只是试图找到一种遵循DRY原则的方法。
谢谢。
以下是一个例子来说明我的意思:
public abstract class A {
protected int[] field1;
public void someMethod() {
//somethingsomething
}
}
public class B : A {
public B() {
//body X
//this initializes field1 in some way
}
public B(bool p) : this() {
//body Y
//this initializes field1 in some way + modification
}
}
public class C : A {
public C() {
//body Z
//this initializes field1 in another way
}
public C(bool p) : this() {
//body Y
//this initializes field1 in another way + modification
}
}
我想做的是找到一种方法,不必重复两次“body Y”。我考虑将
B(bool p)
和C(bool p)
中的“body Y”放在class A
的构造函数A(bool p)
中,然后让B(bool p)
和C(bool p)
调用基类构造函数: base(bool p)
,随后是一个空的body。但是我发现基类构造函数必须调用派生类构造函数。对我来说,这听起来很愚蠢。虽然我不确定,但我有这样的感觉:从基类调用派生类的内容只能在运行时完成,无法在编译时检查。我只是试图找到一种遵循DRY原则的方法。
谢谢。
Y
作为A
的一个方法,在两个构造函数中都进行调用。 - D Stanley