接口方法的抽象修饰符

Men*_*yus 2 c# c#-10.0

今天,我将一些方法从抽象类复制到接口,我意识到编译器不会在抽象关键字下划线。我试图查找文档,但没有找到任何相关内容。

我也将其放入 SharpLab,但发现两者之间没有区别。

public interface ITestAbstract
{
    public abstract void MyTest();
}

public interface ITest
{
    public void MyTest();
}
Run Code Online (Sandbox Code Playgroud)

我的猜测是,这是允许的,因为默认情况下接口方法实际上是抽象方法,或者我错过了什么?

Swe*_*per 6

此功能已添加到 C# 8 -默认接口方法中:

接口中的修饰符

接口的语法很宽松,允许对其成员进行修饰符。允许使用以下内容:privateprotectedinternalpublicvirtualabstractsealedstaticexternpartial

这意味着您不允许abstract在此之前修改您的方法。

目的之一是支持重新抽象。文档中的示例:

interface IA
{
    void M() { WriteLine("IA.M"); }
}
interface IB : IA
{
    abstract void IA.M();
}
class C : IB { } // error: class 'C' does not implement 'IA.M'.
Run Code Online (Sandbox Code Playgroud)