如问题标题所示,我想向接口添加一个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类中访问getFoo属性。

10-07 20:09
查看更多