2016-11-04 131 views
-4

我有一些麻烦,为我的课界面。我尝试了一个简单的公共无效,并工作。但我无法让它与下面的代码中的公共静态空白一起工作。我认为这与枚举方法中的参数有关。但我如何解决这个问题?从接口类

这是类:

enter image description here

这是我的接口:

enter image description here

+4

请始终在您的问题中使用文字,而不是图片。 –

+6

接口的实现方法不能是静态的。这是一条规则。 – Jonesopolis

+0

如果我不能使用接口,我该如何使用这些方法? – Skupaj

回答

1

接口是合同。他们为合同中的所有方法指定方法签名。

在你的界面,您可以:

void FFT(/*stuff*/) 

然而,在您的实现,您已经定义

static void FFT(/*stuff*/) 

现在,为什么我们不能用静态的?从Joel Spoelsky

由于接口是一个“合同”或消费者(主叫方)之间的协议和提供者(被叫)。一个接口描述了calle将提供什么功能和如何提供功能。没有必要由第三方提供静态成员。静态成员不能被提供者覆盖,因此它们不属于接口。

+0

http://discuss.joelonsoftware.com/default.asp?dotnet.12.305680.12 –

+0

@viveknuna这不是我所链接的吗? – Dudemanword

1

接口是调用者和被调用者之间的契约。静态成员属于类而不是对象,所以它的静态方法没有意义。

1

为了解释为什么这样做没什么意义,创建接口的原因是您可以传递类的对象作为接口类型的引用,所以消费者不需要知道哪个底层键入对象。例如,您可以将IEnumerable<Foo>传递给一个不需要知道或关心这个数组或列表或哈希集等的方法,它只需要一个Foos序列。

静态方法不与一个实例关联,因此没有可引用的对象。在C#中没有可以用来引用类而不是对象的静态接口的概念。

如果您有其他想要交换使用的类,可以摆脱静态并创建这些单例。