public c#8 中的接口成员

public interface member in c#8

从最新版的c#开始,可以写出如下接口:

public interface IMyInterface
{
    public void MyMethod();
}

这对我来说似乎是一种代码味道,因为我觉得它的目的是编写以前可用的代码:

public interface IMyInterface
{
    void MyMethod();
}

这两个接口完全一样吗? public 关键字 add/changes 有什么用吗?这是应该纠正的东西,还是我错了,现在应该 public 一直使用吗?

随着 C# 8 附带的 default interface methods 的引入,添加了能够设置显式访问修饰符的功能。默认接口方法支持不同的访问修饰符,因此至少为了一致性能够为所有成员指定访问修饰符。如果您指定了一个无效的访问修饰符(例如,没有主体的 private 方法),代码将无法编译。

Are those two interfaces exactly the same ? Does the public keyword add/changes anything ?

是的,默认 访问修饰符是 public显式设置会得到相同的结果。

Is this something that should be corrected, or am I wrong and should public be consistently used now ?

由你决定。例如,如果您喜欢对 类 中的字段使用 private,那么您可能希望在您的接口中为 public 应用相同的明确性,现在这是可能的。

default interface methods 规范提案涉及访问修饰符更改的细节。