C# 声明静态类,以便它们可以存储在列表中

C# 声明静态类,以便它们可以存储在列表中,c#,C#,我正在开发一个软件,它可以获取实时数据,并根据用户输入从中提取一些功能。每个可用功能都由一个方法组成,该方法接受一个双精度数组并返回所需功能,例如MeanAbsoluteValue的此方法: public static class MeanAbsoluteValue{ public static double Calculate(double[] data){ return data.Sum(s => Math.Abs(s)) / data.Length;

我正在开发一个软件,它可以获取实时数据,并根据用户输入从中提取一些功能。每个可用功能都由一个方法组成,该方法接受一个双精度数组并返回所需功能,例如MeanAbsoluteValue的此方法:

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或委托吗?我不确定使用静态方法的抽象类会怎么样,我知道您可以强制它们实现,但如果实现的逻辑正确,我们可以使用它。