另一种实例化派生类基部分的方法是在ctor中注入基



我有一个基类和派生类,它们结合在一起有许多需要初始化的参数。我想使用依赖注入,更具体地说,在构造导数时注入基础部分。

例如

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; } }

最新更新