C# 的哪个版本不再要求显式实现受保护的接口成员?

问题描述 投票:0回答:1

在 C# 8 中,接口已升级为允许

protected
成员以及其他访问修饰符。当时,实现类需要显式实现这样的
protected
接口成员。

所以,在 C# 8 下这段代码:

public interface IFoo
{
    protected void Method();
}

public class Foo : IFoo
{
    public void Method()
    {
    }
}

产生此编译错误:

CS8704 'Foo' does not implement interface member 'IFoo.Method()'. 'Foo.Method()' cannot implicitly implement a non-public member.

我最近没有编写任何利用此“功能”的代码(强制隐藏实现者特定的帮助方法以防止正常的公共访问),但最近我注意到不再需要显式实现。上面的代码片段现在可以正常编译(至少从 C# 11 开始)。为什么/什么时候发生这种变化?我找不到有关更改的任何文档或讨论,它是由于其他语言更改而偶然发生的吗?

c# interface roslyn protected
1个回答
0
投票

此功能称为“默认接口方法”,您可以在本文中找到更多信息:使用默认接口方法更新接口

这确实是一项为了提高语言灵活性等而实现的功能。在基础知识页面您可以在“接口”部分看到他们解释了同样的事情:

从 C# 8.0 开始,接口可以定义默认实现 对于其部分或全部成员。实现的类或结构 接口不必实现具有默认值的成员 实施。

© www.soinside.com 2019 - 2024. All rights reserved.