基本继承 - 太冗长了?

时间:2016-10-06 16:31:37

标签: c# inheritance constructor

我正在寻找一种以编程方式更智能的方式来继承这里。我对编程世界很陌生,所以它更多的是我在这里寻找的方法论。这是继承的正确方法吗?

这种情况下的基类有一个很大的构造函数。必须在每个继承的类中调用base(w, x, y, z)看起来非常冗长。坦率地说,它看起来像是懒惰或糟糕的代码。

public class DataStudioGear : DataItem  {
    string name;

    int moneyValue;
    int compression;
    int wideness;
    int wowFactor;

    public DataStudioGear(string name, int value, int comp, int wide, int wow) {
        this.name = name;
        moneyValue = value;
        compression = comp;
        wideness = wide;
        wowFactor = wow;
    }
}

所以现在任何继承自此的类都必须将这些变量传递给构造函数。这留下了一堆看起来像这样的类:

public class Console : DataStudioGear {
    public Console(string name, int value, int comp, int wide, int wow) : base(name, value, comp, wide, wow) {

    }
}

public class Compressor : DataStudioGear {
    public Compressor(string name, int value, int comp, int wide, int wow) : base(name, value, comp, wide, wow) {

    }
}

这些构造函数是巨大的。虽然我对编程很新,但它看起来很糟糕。

对于我在这里想要完成的事情,有没有更好的解决方案?

1 个答案:

答案 0 :(得分:1)

考虑使用工厂模式。下面的代码在基类中使用静态泛型方法来生成子类,同时填充属性值。

public class DataStudioGear : DataItem
{
    string _name;
    private int _moneyValue;
    int _compression;
    int _wideness;
    int _wowFactor;

    public static T DataTestFactory<T>(string name, int value, int comp, int wide, int wow)
        where T : DataStudioGear, new()
    {
        return new T { _name = name, _moneyValue = value, _compression = comp, _wideness = wide, _wowFactor = wow};
    }
}

public class Console : DataStudioGear { }

public class Compressor : DataStudioGear { }

[TestMethod]
public void TestDataItemFactory()
{
    Console console = DataStudioGear.DataTestFactory<Console>("test", 1, 1, 1, 1);
    Compressor compressor = DataStudioGear.DataTestFactory<Compressor>("test", 1, 1, 1, 1);
}