正如问题标题所暗示的,我想添加一个 Action<string>
到一个界面。这可能吗?目前它说 Interfaces cannot contain fields
最佳答案
您需要将其添加为属性:
public interface IYourInterface
{
Action<string> YourAction { get; set; }
}
没有 get/set 它只是一个字段,正如编译器指出的那样,接口(interface)不能包含字段。这确实意味着当您实现此接口(interface)时,您还需要提供实际属性(尽管很明显它可以是一个简单的自动属性):
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
)如果你愿意的话。这并不意味着类不能 有另一个类,它只是意味着不能通过接口(interface)访问它。例如:
public interface IYourInterface
{
Action<string> YourAction { get; }
}
public class Foo : IYourInterface
{
public Action<string> YourAction { get; set; }
}
所以在上面的代码中,您可以访问 YourAction
属性仅作为 get
通过界面,但你可以set
或 get
它来自 Foo
类。
关于c# - 如何将 Action<string> 添加到界面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9772005/