すべてがオブジェクトから継承されます。継承の基本です。すべてを暗黙的に継承ツリーにキャストできます。
object me = new Person();
したがって、これを論理的な結論までたどると、人のグループはオブジェクトのグループでもあります。
List<Person> people = new List<Person>();
people.Add(me);
people.Add(you);
List<object> things = people; // Ooops.
それがうまくいかないことを除けば、.NET を設計した人々がこれを見落としたか、または何らかの理由があり、そのどちらかはわかりません。少なくとも 1 回は、これが役立つ状況に遭遇しましたが、最終的に厄介なハック (キャスト演算子を実装するためだけに List をサブクラス化する) を使用する必要がありました。
問題はこれです: この行動には理由がありますか? 望ましい動作を得るためのより簡単な解決策はありますか?
記録として、私がこの種の動作を望んでいたのは、ToString() を呼び出して文字列を適切にフォーマットすることでオブジェクトのリストを表示する汎用印刷機能だったと思います。