如何添加操作<;字符串>;到接口

本文关键字:lt 字符串 gt 接口 操作 何添加 添加 | 更新日期: 2023-09-27 18:28:27

正如问题标题所示,我想向接口添加一个Action<string>。这可能吗?此时它显示Interfaces cannot contain fields

如何添加操作<;字符串>;到接口

您需要将其添加为属性:

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; }
}

因此,在上面的代码中,您可以通过接口仅作为get访问YourAction属性,但您可以从Foo类访问setget属性。

接口不能包含字段,但可以包含属性,因此可以通过这种方式添加。

我引用:

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

由于Action是一个feild,它不可能是接口的一部分。http://msdn.microsoft.com/en-us/library/ms173156.aspx