2012-03-19 22 views
9

正如問題標題所示,我想在界面中添加Action<string>。這可能嗎?目前,它說Interfaces cannot contain fields如何將Action <string>添加到界面?

+0

將代表添加到您的合同/接口是一個糟糕的設計。 – 2012-03-19 14:38:11

+0

@KirillPolishchuk你能解釋/證明嗎? – anatol 2017-12-01 04:56:12

回答

22

你需要將其添加爲一個屬性:

public interface IYourInterface 
{ 
    Action<string> YourAction { get; set; } 
} 

沒有get/set方法,它只是一個領域,因爲編譯器指出接口不能包含字段。這也意味着,當你實現這個接口,您需要提供實際的屬性,以及(儘管這顯然可以是一個簡單的自動屬性):

public class Foo : IYourInterface 
{ 
    public Action<string> YourAction { get; set; } 

    // ... 
} 

鑑於這種情況,您就可以使用您的Action<string>從接口:

IYourInterface iFoo = new Foo(); 

iFoo.YourAction = s => Console.WriteLine(s); 

iFoo.YourAction("Hello World!"); 

正如漢斯表示,你可以在你的界面顯示只是一個get(甚至只是一個set)如果你想。這並不意味着類不能有有另一個,它只是意味着它不會通過接口訪問。例如:

public interface IYourInterface 
{ 
    Action<string> YourAction { get; } 
} 

public class Foo : IYourInterface 
{ 
    public Action<string> YourAction { get; set; } 
} 

所以在上面的代碼中,你可以訪問YourAction屬性只爲get通過該接口,但你可以set或從Fooget它。

+0

作爲一個附加說明:在一個界面中,你可以指定只有一個「get」:'動作 YourAction {get; },將它留給實現如何/是否提供「集合」。 – 2012-03-19 14:37:43

+0

非常真實。你甚至可以指定它只有一個集合(雖然這有點用處不大) – 2012-03-19 15:00:58

0

一個接口不能包含字段,但它們可以包含屬性,所以你可以這樣添加它。

0

我引述:

「接口包括方法,屬性,事件,索引,或者任何 這四個成員類型的組合而得到的接口不能包含 常數,域,操作符,實例構造函數,析構函數。 ,或 類型不能包含靜態成員的接口成員 自動公開,而不能包含任何訪問修飾符」

,因爲行動是費爾德 - 它不能成爲一個接口的一部分。 http://msdn.microsoft.com/en-us/library/ms173156.aspx

+5

誰說它必須是一個字段。它也可能是一個財產。 – rideronthestorm 2013-04-15 14:58:19

相關問題