今天,我将一些方法从抽象类复制到接口,我意识到编译器不会在抽象关键字下划线。我试图查找文档,但没有找到任何相关内容。
我也将其放入 SharpLab,但发现两者之间没有区别。
public interface ITestAbstract
{
public abstract void MyTest();
}
public interface ITest
{
public void MyTest();
}
Run Code Online (Sandbox Code Playgroud)
我的猜测是,这是允许的,因为默认情况下接口方法实际上是抽象方法,或者我错过了什么?
此功能已添加到 C# 8 -默认接口方法中:
接口的语法很宽松,允许对其成员进行修饰符。允许使用以下内容:
private、protected、internal、public、virtual、abstract、sealed、static、extern和partial。
这意味着您不允许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)