2013-04-15 13 views
5

私は、リアルタイムデータを取り込み、ユーザー入力に応じてその中からいくつかの機能を抽出するソフトウェアを開発しています。利用可能な各機能は、このようなMeanAbsoluteValueのためにこの一つとして、doubleの配列をとり、希望の機能を返す1つの方法で構成されていますリスト内に格納できるように静的クラスを宣言する

public static class MeanAbsoluteValue{ 
    public static double Calculate(double[] data){ 
     return data.Sum(s => Math.Abs(s))/data.Length; 
    } 
} 

の各機能は、唯一私がしようと考えていた1つの計算方法を持っているので、コレクションからコレクションを選択できるように書き換えます。

私は彼らが使用するインタフェースを作成しようとしましたが、静的であるため、これは許可されていません。

これを行う方法はありますか?もしそうなら、正しい方向に私を向けることができますか?

+0

あなたがポリモーフィズムを活用することができません静的クラスを使用します。 – code4life

+0

ラムダやデリゲートを使用できませんか? – Rik

+0

私は静的メソッドを持つ抽象クラスについてはわかりませんが、実装するよう強制することができますが、実装されたロジックを使用できるかどうかはわかります。 – Devesh

答えて

8

あなたはこのように、これらのクラスのCalculateメソッドから構築デリゲートの配列を作成することができます

Func<double[],double>[] array = new Func<double[],double>[] { 
    MeanAbsoluteValue.Calculate 
, MeanValue.Calculate 
, Deviation.Calculate 
// ...and so on 
}; 

ここdemo on ideoneです。

+0

完璧に働いて、ありがとう! – Sander

0

ちょうど辞書にあなたの関数へのFuncのコレクション...

var list = new List<Func<double[], double>(MeanAbsoluteValue.Calculate, Average.Calculate) 
var accum = 0; 
foreach(var func in list) 
{ 
    accum += func(new [] {1,3,4,}); 
} 
2

ストアデリゲートを持っている、と名前でそれらを見て

var methods = new Dictionary<string, Func<double[], double>>(); 
methods.Add("MeanAbsoluteValue", MeanAbsoluteValue.Calculate); 

... 
public double DoFunc(string name, double [] args) 
{ 
    var func = methods[name]; 
    return func(args); 
} 
関連する問題