如果我有以下幾點:泛型類Polymorphisim
public abstract class Parameter<T>
{
protected T value;
public virtual T Value
{
get { return value; }
set { this.value = value; }
}
protected Parameter(T startingValue)
{
value = startingValue;
}
}
public class FloatParameter : Parameter<float>
{
public FloatParameter(float startingValue) : base(startingValue){}
}
public class IntParameter : Parameter<int>
{
public override int Value
{
get { return value; }
set { this.value = value > 100 ? 100 : value; }
}
public IntParameter(int startingValue) : base (startingValue) {}
}
有什麼方法來創建一些List<Parameter>
,可以包含任何派生類型的?例如,類似的東西:
// no type specified in Parameter
List<Parameter> storedParameters = new List<Parameter>();
storedParameters.Add(new FloatParameter(2f));
storedParameters.Add(new IntParameter(7));
foreach(Parameter p in storedParameters)
{
DoSomethingWithValue(p.Value);
}
或者,或者,如果此實現有缺陷,是否有更好的方法來做到這一點?我在這裏感覺有點幼稚。
爲什麼要在橘子的名單持有芒果? –
那麼,在你的例子中'Value'應該是什麼類型? –
這個實現的問題是你正在嘗試使用的兩種類型。 Int和float是struct,這意味着一旦你將T賦給其中的一個,你就不能添加另一個。 – Weggo