逻辑及其对Collections.Generic和继承的应用

Mat*_*ley 3 .net collections inheritance

一切都从对象继承.这是继承的基础.一切都可以隐式地构建继承树,即.

object me = new Person();
Run Code Online (Sandbox Code Playgroud)

因此,遵循这个逻辑结论,一群人也将成为一组对象:

List<Person> people = new List<Person>();
people.Add(me);
people.Add(you);
List<object> things = people; // Ooops.
Run Code Online (Sandbox Code Playgroud)

除了,这不起作用,设计.NET的人要么忽略了这个,要么就是有原因,我不确定是哪个.至少有一次我遇到了一个有用的情况,但我不得不最后使用一个讨厌的黑客(子类化List只是为了实现一个强制转换操作符).

问题是:这种行为有原因吗?是否有更简单的解决方案来获得所需的行为?

为了记录,我相信我想要这种行为的情况是一个通用的打印功能,它通过调用ToString()并很好地格式化字符串来显示对象列表.

Ham*_*ith 5

好的,在.net中使用泛型的每个人都必须在某个时刻碰到这个问题.

是的,直觉它应该工作.不,在当前版本的C#编译器中它没有.

Eric Lippert对这个问题有一个非常好的解释(它有11个部分或者什么东西,会让你在某些地方弯曲,但是值得一读).看到这里.

编辑:

挖出另一个相关的链接,这个讨论java如何处理这个.看到这里