Все наследуется от объекта. Это основа наследования. Все может быть неявно приведено к наследственному дереву, т. Е.
object me = new Person();
Следовательно, следуя этому логическому заключению, группа людей также будет группой объектов:
List<Person> people = new List<Person>();
people.Add(me);
people.Add(you);
List<object> things = people; // Ooops.
За исключением того, что это не сработает, люди, разработавшие .NET, либо упустили это из виду, либо есть причина, и я не уверен, какая именно. По крайней мере, однажды я столкнулся с ситуацией, когда это было бы полезно, но мне пришлось в конечном итоге использовать неприятный хак (создание подкласса List просто для реализации оператора приведения).
Вопрос в следующем: есть ли причина для такого поведения? Есть ли более простое решение для получения желаемого поведения?
Для справки, я считаю, что ситуация, в которой я хотел такого рода поведения, была общей функцией печати, которая отображала списки объектов, вызывая ToString () и корректно форматируя строки.