私は、次がある場合:ジェネリッククラス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'にはどのようなタイプがありますか? –
この実装の問題は、使用しようとしている2つのタイプです。 Intとfloatは構造体です。つまり、ひとつにTを代入すれば、もう一方を追加することはできません。 – Weggo