我有一个接口,有一些方法
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);