我注意到IOrderedEnumerable
接口有一个具体的实现,那就是OrderedEnumerable.cs
类.然而,我也注意到它是内部的,你不能在代码中使用它.
这样做有什么好处,因为我想知道公开它会有什么缺点,为什么运行库需要这个类.
我注意到IOrderedEnumerable
接口有一个具体的实现,那就是OrderedEnumerable.cs
类.然而,我也注意到它是内部的,你不能在代码中使用它.
这样做有什么好处,因为我想知道公开它会有什么缺点,为什么运行库需要这个类.
运行时需要这个类,因为OrderBy()
和OrderByDescending()
方法必须返回一些与您期望IOrderedEnumerable
的行为相同的内容.
将其设置为internal
的好处与所有Information Hiding个/封装的好处相同:.NET团队可以自由更改该类,而不必担心他们会 destruct 其他人的代码.
例如,OrderedEnumerable构造函数takes more arguments now比it used to.因为这个类是internal
,所以他们只需要更改自己的代码就可以适应这种变化.
如果它是public
,您或我可能会忍不住编写代码来创建new OrderedEnumerable<TKey, TValue>(...)
.然后,当我们升级到下一个框架版本时,它会 destruct 我们的代码,因为构造函数签名不再存在.
编写库的团队会非常小心地只公开"接口"(不仅仅是C#interface
,还有方法签名、类型等).他们愿意无限期地保持向后兼容性.默认情况下,他们将所有内容都设置为内部或私有,只有经过仔细考虑后才将其设置为public
.
另一个好处是,它保持了面向公众的表面清洁,并致力于他们希望人们对他们的图书馆做的事情.如果它们库中的每个类和方法都被公开,我们的智能感知菜单将充满我们可能永远不会真正想要使用的选项.