如问题标题所示,我想向接口添加一个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!");
正如汉斯所指出的,如果你想要,你可以在你的界面中显示一个
get
(或者甚至只是一个set
)。这并不意味着类不能拥有另一个,它只是意味着它不能通过接口访问。例如:public interface IYourInterface
{
Action<string> YourAction { get; }
}
public class Foo : IYourInterface
{
public Action<string> YourAction { get; set; }
}
所以在上面的代码中,您只能通过接口以
YourAction
的形式访问get
属性,但是您可以从set
类中访问get
或Foo
属性。