C#-8 接口中的抽象、虚拟和密封方法

use*_*077 7 c# c#-8.0 default-interface-member

使用C#-8.0的.Net Core Console应用程序中以下界面没有错误

interface I
{
    public abstract void f();
    public virtual void g() => Console.WriteLine("g");
    public sealed void h() => Console.WriteLine("h");
}
Run Code Online (Sandbox Code Playgroud)

abstract防止在接口中添加定义。virtual并且sealed需要在接口中进行定义。sealed阻止派生类中的实现h

abstract在接口中使用、virtualsealed时,在当前实现的 C# - 8 版本中还有其他含义或应用吗?它们应该如何以及何时在界面中使用?

bol*_*lov 2

这是来自提案:

接口的语法很宽松,允许对其成员进行修饰符。允许使用以下内容:私有、受保护、内部、公共、虚拟、抽象、密封、静态、外部和部分。

virtual 除非使用sealedor修饰符,否则其声明包含主体的接口成员就是成员。private修饰符virtual 可以用在函数成员上,否则该函数成员将是隐式的virtual。类似地,尽管abstract是没有主体的接口成员的默认值,但可以显式给出该修饰符。可以使用关键字声明非虚拟成员sealed

private接口的成员或sealed函数成员没有主体是错误的。函数private成员不能具有修饰符 sealed