我正在寻找一种以编程方式更智能的方式来继承这里。我对编程世界很陌生,所以它更多的是我在这里寻找的方法论。这是继承的正确方法吗?
这种情况下的基类有一个很大的构造函数。必须在每个继承的类中调用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) {
}
}
这些构造函数是巨大的。虽然我对编程很新,但它看起来很糟糕。
对于我在这里想要完成的事情,有没有更好的解决方案?
答案 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);
}