为什么允许在密封类中编写受保护的成员?

时间:2018-08-25 18:49:11

标签: c#

密封类是不能继承的类,为什么允许在密封类中编写受保护的成员

2 个答案:

答案 0 :(得分:4)

因为Microsoft认为这不是错误。

我同意在protected类中声明sealed成员是没有意义的。在protected类中的成员上使用sealed与拥有private成员相同

因此,您将收到以下编译器警告: https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2008/7x8ekes3(v=vs.90)

答案 1 :(得分:4)

密封的类仍然可以继承受保护的成员,因此对我来说很有意义。也许设计人员这样做是为了允许继承,而无需进行特殊的编译器案例。

public class Foo
{
    protected virtual string Name { get; set; } = "Foo";
}

public sealed class Bar : Foo
{
    protected override string Name { get; set; } = "Bar";
}

更新: 来自2009中的Eric Lippert:

  

语言设计笔记文件的决定   将虚拟方法引入密封类型会导致错误   1999年10月18日,但没有给出任何理由   决定。我在笔记中找不到任何可以说明原因的信息   引入一个新的受保护成员应该是合法的。我最好的猜测:   这可能只是第一个版本中的一个疏忽,然后   对其进行修复已成为一项重大突破。 –埃里克·利珀特