2016-11-04 41 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#中沒有可以用來引用類而不是對象的靜態接口的概念。

如果您有其他想要交換使用的類,可以擺脫靜態並創建這些單例。