2013-04-15 3 views
5

के भीतर संग्रहीत किया जा सके। मैं एक ऐसे सॉफ्टवेयर को विकसित कर रहा हूं जो रीयलटाइम-डेटा लेता है और उपयोगकर्ता इनपुट के आधार पर उसमें से कई सुविधाएं निकालता है।स्थैतिक वर्गों को घोषित करें ताकि उन्हें सूची

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

सुविधाओं में से प्रत्येक के बाद से ही तरीका है एक गणना मैं कोशिश कर के बारे में सोच रहा था की है: प्रत्येक उपलब्ध सुविधा एक विधि है कि इस तरह MeanAbsoluteValue के लिए इस एक के रूप में युगल की एक सरणी लेता है और, वांछित सुविधा लौटने के होते हैं उन्हें फिर से लिखने के लिए ताकि वे उस संग्रह से एकत्र और चुने जा सकें।

मैंने उनके लिए उपयोग करने के लिए एक इंटरफ़ेस लिखने का प्रयास किया है, लेकिन चूंकि वे स्थिर हैं इसलिए इसकी अनुमति नहीं थी।

क्या ऐसा करने का कोई तरीका है? और यदि हां, तो क्या आप मुझे सही दिशा में इंगित कर सकते हैं?

+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

बस एक शब्दकोश में अपने कार्यों के लिए समारोह का एक संग्रह ...

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); 
} 
संबंधित मुद्दे