我有一个基类和派生类,它们结合在一起有许多需要初始化的参数。我想使用依赖注入,更具体地说,在构造导数时注入基础部分。
例如
abstract class Baseclass
{
private int a, b, c, d, e;
public Baseclass(int A, int B, int C, int D, int E)
{
a = A;
b = B;
c = C;
d = D;
e = E;
}
public Baseclass(Baseclass basepart)
{
this = basepart; // error `this` is readonly
a = basepart.a; // so I use this method instead
b = basepart.b;
c = basepart.c;
d = basepart.d;
e = basepart.e;
}
}
class Derived : Baseclass
{
public Derived(Baseclass i_Basepart) : base(i_Basepart){}
}
正则ctor和"复制ctor"看起来非常相似,而且由于它们有很多参数(比这个例子更多),所以看起来不太正确。有别的办法吗?
这就是组合而非继承发挥作用的地方。你可以将你的设置转移到另一个类中,并将其传入:
class Baseclass
{
private Parameters parameters;
public BaseClass(Parameters parameters)
{
this.parameters = parameters;
}
}
class Derived : Baseclass
{
public Derived(Parameters parameters) : base(parameters) { }
}
class Parameters
{
int a, b, c, d, e, etc.
}
您甚至可以在基类中编写一些getter/setter,以透明的方式(对调用者)访问Parameters值。例如:
public A { get { return parameters.a; } set { parameters.a = value; } }