将默认接口实现定义为“虚拟”是什么意思?

What does it mean to define a default interface implementation as 'virtual'?

提问人:baddie 提问时间:11/18/2023 最后编辑:Daniel A. Whitebaddie 更新时间:11/18/2023 访问量:38

问:

我有一个带有默认实现的虚拟方法的接口:

interface I
{
  public virtual void M() => ...
}

我想像这样覆盖它并调用默认实现:

class A : I
{
  public override void M() { base.M(); ... }
}

这不会编译。那么,如果不能覆盖“虚拟”接口,那么用“虚拟”标记接口意味着什么呢?

C# 接口 虚拟 默认实现

评论

0赞 Flydog57 11/18/2023
我相信(但我不确定,我还没有找到任何证据)直到最近才允许您在第一个代码块中显示(可能是随着默认接口实现的开始)。现在,它显然是允许的,但我猜它几乎被忽略了。默认接口实现的语义不同于基类中标记的方法的实现。在第二个代码块中,您不是在覆盖实现,而只是在提供自己的实现。virtualvirtual
0赞 Charlieface 11/19/2023
这回答了你的问题吗?在 C# 8 中,将成员设置为虚拟会阻止调用默认接口实现并导致 StackOverflowException
0赞 Charlieface 11/19/2023
你不能这么做。实现该方法后,根本无法调用默认实现。
0赞 baddie 11/19/2023
@Charlieface略有不同,我感兴趣的是虚拟在实际接口中声明时的作用,而不是在实现类中声明时的作用。
0赞 Charlieface 11/19/2023
根据定义,除非它是,否则它基本上是一个不必要的额外修饰符,因为它无论如何都是默认的 learn.microsoft.com/en-us/dotnet/csharp/language-reference/......virtualsealedprivate

答: 暂无答案