簡體   English   中英

為什么允許在密封類中編寫受保護的成員?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM