正如问题标题所示,我想在界面中添加Action<string>
。这可能吗?目前它说Interfaces cannot contain fields
答案 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
,但您可以set
或get
来自Foo
1}} class。
答案 1 :(得分:0)
接口不能包含字段,但它们可以包含属性,因此您可以这样添加。
答案 2 :(得分:0)
我引用:
“接口由方法,属性,事件,索引器或任何组件组成 这四种成员类型的组合。界面不能包含 常量,字段,运算符,实例构造函数,析构函数或 类型。它不能包含静态成员。接口成员是 自动公开,并且不能包含任何访问修饰符“
因为Action是一个游戏 - 它不能成为界面的一部分。 http://msdn.microsoft.com/en-us/library/ms173156.aspx