如果我有以下内容:
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);
}
或者,如果这种实现有缺陷,有更好的方法吗?我目前的做法感觉有些幼稚。
DoSomethingWithValue
的代码吗? - Hamid PourjamDoSomethingWithValue
是一个通用方法,它在运行时对值进行类型检查。而且Value
应该与泛型指定的类型相同。所以FloatParameter
的Value
属性应该返回一个浮点数。 - Danny HerbertDoSomethingWithValue
进行运行时类型检查,则应在层次结构中的每个类中以多态方式实现。 - Hamid Pourjam