为什么List <T>没有密封?

Pie*_*ten 23 .net c# language-design sealed

在阅读了这个问题的答案后,脑海中浮现出这个问题; 这基本上List<T>没有虚拟方法,因为它被设计为"快速,不可扩展".

如果这是设计目标,为什么原始设计不包括密封类?(我知道现在不可能,看看这会如何破坏客户端代码中的很多子类)

Jos*_*osh 15

密封它没有令人信服的理由.从它衍生出来并没有坏处.我曾经是相反的心态 - 只留下你打算让人们从中获取的东西.但事后看来,没有任何意义..NET采用的方法是默认情况下方法是非虚拟的,但默认情况下类是未密封的.List<T>只是遵循相同的做法.

你想要密封一个类的地方是它何时覆盖虚方法,但进一步的子类化并不容易或明显.从集合中派生诸如Dictionary<TKey,TValue>粘贴已知类型参数并避免在应用程序中使用时输入它们可能稍微有用.例如,你可能有一个派生自的QueryString类Dictionary<String,String>.

而且由于没有虚拟方法,因此通过密封来保护课程并没有什么可以保护的.