如何将Action <string>添加到接口?</string>

时间:2012-03-19 14:28:34

标签: c# .net

正如问题标题所示,我想在界面中添加Action<string>。这可能吗?目前它说Interfaces cannot contain fields

3 个答案:

答案 0 :(得分:24)

您需要将其添加为属性:

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!");

正如Hans所说,如果您愿意,可以在界面中指明get(或者甚至只是set)。这并不意味着类不能拥有另一个,它只是意味着它不能通过接口访问。例如:

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

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

因此,在上面的代码中,您只能通过界面访问YourAction属性作为get,但您可以setget来自Foo 1}} class。

答案 1 :(得分:0)

接口不能包含字段,但它们可以包含属性,因此您可以这样添加。

答案 2 :(得分:0)

我引用:

  

“接口由方法,属性,事件,索引器或任何组件组成   这四种成员类型的组合。界面不能包含   常量,字段,运算符,实例构造函数,析构函数或   类型。它不能包含静态成员。接口成员是   自动公开,并且不能包含任何访问修饰符“

因为Action是一个游戏 - 它不能成为界面的一部分。 http://msdn.microsoft.com/en-us/library/ms173156.aspx