C# 声明静态类,以便它们可以存储在列表中
我正在开发一个软件,它可以获取实时数据,并根据用户输入从中提取一些功能。每个可用功能都由一个方法组成,该方法接受一个双精度数组并返回所需功能,例如MeanAbsoluteValue的此方法:C# 声明静态类,以便它们可以存储在列表中,c#,C#,我正在开发一个软件,它可以获取实时数据,并根据用户输入从中提取一些功能。每个可用功能都由一个方法组成,该方法接受一个双精度数组并返回所需功能,例如MeanAbsoluteValue的此方法: public static class MeanAbsoluteValue{ public static double Calculate(double[] data){ return data.Sum(s => Math.Abs(s)) / data.Length;
public static class MeanAbsoluteValue{
public static double Calculate(double[] data){
return data.Sum(s => Math.Abs(s)) / data.Length;
}
}
由于每个特性只有一个计算方法,我想尝试重写它们,以便可以从该集合中收集和选择它们
我曾尝试编写一个供他们使用的接口,但由于它们是静态的,所以这是不允许的
有没有办法做到这一点?如果是这样,你能给我指出正确的方向吗?你可以创建一个由这些类的
Calculate
方法构造的委托数组,如下所示:
Func<double[],double>[] array = new Func<double[],double>[] {
MeanAbsoluteValue.Calculate
, MeanValue.Calculate
, Deviation.Calculate
// ...and so on
};
Func[]数组=新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,});
}
var list=new list将函数的委托存储在字典中,并按名称查找它们
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);
}
var方法=新字典();
方法。添加(“MeanAbsoluteValue”,MeanAbsoluteValue.Calculate);
...
public double DoFunc(字符串名称,双[]参数)
{
var func=方法[名称];
返回函数(args);
}
您将无法使用静态类来利用多态性。您不能使用lambda或委托吗?我不确定使用静态方法的抽象类会怎么样,我知道您可以强制它们实现,但如果实现的逻辑正确,我们可以使用它。