我有一个接口,有一些方法

interface IFunction
{
    public double y(double x);

    public double yDerivative(double x);
}


我有实现它的静态类。

static class TemplateFunction:IFunction
{
    public static double y(double x)
    {
        return 0;
    }

    public static double yDerivative(double x)
    {
        return 0;
    }
}


我想将此类作为参数传递给另一个函数。

 AnotherClass.callSomeFunction(TemplateFunction);


还有其他一些捕获请求的类

class AnotherClass
{
    IFunction function;
    public void callSomeFunction(IFunction function)
    {
        this.fuction = function;
    }
}


好吧,这行不通...我尝试使用Type表达式,但是这种接缝打破了使用接口的想法。有谁知道如何纠正代码?

最佳答案

静态类无法实现接口,但是您可以通过使类成为非静态类和通用方法来轻松地克服此问题:

class AnotherClass
{
    IFunction function;

    public void callSomeFunction<T>()
        where T: IFunction, new()
    {
        this.fuction = new T();
    }
}


这与您想要的语法非常接近:

AnotherClass.callSomeFunction<TemplateFunction>();


但是我实际上认为这种方法太复杂了,可能会使某人感到困惑,您应该遵循Servy的方法,该方法更简单:

AnotherClass.callSomeFunction(TemplateFunction.Instance);

09-15 16:14