【发布时间】:2011-04-23 03:15:05
【问题描述】:
看ReadOnlyCollection类的规范,它确实实现了IList接口,对吧。
IList 接口有 Add/Update/Read 方法,我们称之为接口的前置条件。如果我有 IList,我应该能够在我的应用程序中的任何地方执行所有此类操作。
但是,如果我在代码中的某处返回 ReadOnlyCollection 并尝试调用 .Add(...) 方法呢?它抛出一个 NotSupportedException。你认为这是一个糟糕设计的好例子吗?此外,这个类是否违反了Liskov Substitution Principle?
为什么微软采用这种方式?让这个 ReadOnlyCollection 只实现 IEnumerable 接口(顺便说一句,它已经是只读的)是否更容易(更好)?
【问题讨论】:
-
+1,当然微软这样做是有原因的,而不是使用单独的界面——毕竟,他们是聪明人。我很想知道他们为什么这样做。
标签: c# frameworks collections liskov-substitution-principle