0

我正在按照本指南https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-8.0/default-interface-methods使用默认接口实现功能。我复制了一个在 interface 中定义默认实现的代码,IA然后在 interface 中覆盖它IB

interface I0
{
    void M() { Console.WriteLine("I0"); }
}

interface I1 : I0
{
    override void M() { Console.WriteLine("I1"); }
}

但它给出了一个错误CS0106 The modifier 'override' is not valid for this item和一个警告CS0108 'I1.M()' hides inherited member 'I0.M()'. Use the new keyword if hiding was intendedTargetFramework设置为net5.0,LangVersionlatest. 为什么即使在官方文档中描述它也不起作用?

4

2 回答 2

2

显然,带有override关键字的示例不正确,必须删除此关键字。此外,它仅在明确指定方法接口时才有效:

interface I0
{
    void M() { Console.WriteLine("I0"); }
}

interface I1 : I0
{
    void I0.M() { Console.WriteLine("I1"); }
}
于 2021-03-15T15:57:45.667 回答
0

文本中它说“不允许隐式覆盖”。

令人困惑的是IC,它后面的接口没有重复该语句,而使用隐式方法,使其看起来隐式方法是有效的。并且IC似乎是您从中复制的界面。

于 2021-03-15T15:16:45.243 回答