[英]Why is it allowed to write protected members in sealed class?
密封類是一個不能繼承的類,為什么允許在密封類中編寫受保護的成員
因為微軟認為這不是一個錯誤。
我同意在sealed
類中聲明protected
成員是沒有意義的。 在sealed
類中使用protected
成員與擁有private
成員相同
因此,您將收到以下編譯器警告: https : //docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2008/7x8ekes3(v = vs.90)
密封類仍然可以繼承受保護的成員,所以對我來說這是有道理的。 也許設計者這樣做是為了允許繼承而不需要編寫特殊的編譯器案例。
public class Foo
{
protected virtual string Name { get; set; } = "Foo";
}
public sealed class Bar : Foo
{
protected override string Name { get; set; } = "Bar";
}
更新:來自Eric Lippert在2009年 :
語言設計說明文件表明,在1999年10月18日做出了將虛擬方法引入密封型錯誤的決定,但沒有給出任何理由。 我可以在筆記中找不到任何理由說明為什么引入一個新的受保護成員應該是合法的。 我最好的猜測:這可能只是第一個版本中的一個疏忽,然后它變成了一個突破性的變化,永遠修復它。 - Eric Lippert
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.