密封类是不能继承的类,为什么允许在密封类中编写受保护的成员
答案 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日,但没有给出任何理由 决定。我在笔记中找不到任何可以说明原因的信息 引入一个新的受保护成员应该是合法的。我最好的猜测: 这可能只是第一个版本中的一个疏忽,然后 对其进行修复已成为一项重大突破。 –埃里克·利珀特