如果我有以下几点:泛型类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