【发布时间】:2008-11-25 13:36:22
【问题描述】:
我了解,如果 S 是 T 的子类,那么 List<S> 不是 List<T> 的子类。美好的。但是接口有不同的范式:如果Foo 实现了IFoo,那么为什么List<Foo> 不是List<IFoo>(的一个例子)?
由于没有实际的类IFoo,这是否意味着在公开List<IFoo> 时我总是必须转换列表的每个元素?或者这只是糟糕的设计,我必须定义自己的集合类ListOfIFoos 才能使用它们?在我看来两者都不合理......
鉴于我正在尝试对接口进行编程,公开此类列表的最佳方式是什么?我目前倾向于在内部将我的List<Foo> 实际存储为List<IFoo>。
【问题讨论】:
-
要解决这个问题中关于 .NET 中类型转换的一般性问题的根本问题,请参阅我对How Can I Convert Types at Runtime?的相关问题的回答