私はこの質問の変形を見ましたが、まだ回答が見つかりませんでした。不明なタイプの実行時にカスタムクラスをインスタンシエート
私はカスタムクラスがあります。
public class Indicator
{
public double Value { get; set;}
virtual public void Calc(val1, val2) {}
}
をそして、私のようなそれから派生多くのクラス、持っている:
class calc_sum : Indicator
{
override public void Calc(val1, val2)
{
Value=val1+val2;
}
}
最後に、私はすべての「インジケータ」を保持するクラスを持っている:
をclass IndicatorCollection
{
List<Indicator> _collection = new List<Indicator>();
...Some other methods here...
}
私が必要とするのは、 "IndicatorCollection"クラスのメソッドを提供することです。 "Indicator"から派生したクラスの名前を_collectionに追加します。 すなわち:ユーザが実行時にインジケータを追加することができ
IndicatorCollection.AddIndicator("calc_sum");
その方法(IndicatorsCollection各部材のValueプロパティを表示リストにバインドされています)。
私は十分に明確であり、正しいアプローチを取っていることを希望します。 アクチベーター方法は、私が探していたまさにです、だから私はそれがより困難にしてみましょう::インジケータインスタンスを追加した後
、IndicatorCollectionは新しいを公開することができ はすべて
更新ありがとうクラスのValueプロパティへのショートカットであるプロパティ。
すなわち:
// After adding calc_sum to the collection, The IndicatorCollection class will have the following //property:
public double calc_sum
{
get { return _collection.Find(i=>i.name=="calc_sym").First().Value;
// The indicator class also has a public member of "name"
}
あなたのコードはコンパイルされません。 – Oded
私は上記の例に基づいて 'Indicator'と' Calc'メソッドを抽象化したいと思います。 –
私はあなたの新しい要件が満たされるとは思わない。 C#を使用して、既存の型にそのプロパティを追加することはできません。 –