2013-04-15 28 views
5

içerisinde depolanabilmeleri için bildirin. Gerçek zamanlı verileri alan ve kullanıcı girişine bağlı olarak bir dizi özellik çıkaran bir yazılım geliştiriyorum. özelliklerin her birini yanaStatik sınıfları, List

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

sadece ben çalışıyorum biri hesaplayın yöntemi düşünüyordum etti: Her mevcut özellik, MeanAbsoluteValue için bunun gibi, istenilen özellik çiftlerde bir dizi alır ve dönüş bir yöntemin oluşur Bunları yeniden yazmak, böylece Koleksiyondan toplanıp seçilebilecekleri şekilde.

Kullanmak için bir Arabirim yazmayı denedim, ancak statik olduklarından, buna izin verilmedi.

Bunu yapmanın bir yolu var mı? Ve eğer öyleyse, bana doğru yönde işaret edebilir misin?

+0

Sen polimorfizmin kaldıraç mümkün olmayacaktır Statik sınıflar kullanarak. – code4life

+0

Lambda veya delegeleri kullanamaz mısınız? – Rik

+0

Statik yönteme sahip soyut bir sınıftan ne anlayacağımı bilmiyorum, bunları uygulamak için zorlayabileceğinizi biliyorum, ancak uygulanan mantık varsa onu kullanabiliriz. – Devesh

cevap

8

Böyle bu sınıfların Calculate yöntemleri inşa delegelerin bir dizi oluşturabilirsiniz:

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

bir demo on ideone olduğunu.

+0

Mükemmel çalışıyor, teşekkürler! – Sander

0

Sadece bir sözlükte Fonksiyonlarınızdan bir Func toplanmasını ...

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

Mağaza delege var ve onları isimleriyle bakmak

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); 
}