5

非ジェネリック クラスが時代遅れになっている (ほぼ) という騒ぎの後で、なぜ .NET コレクション クラスはまだ非ジェネリックなのですか? たとえば、Control.ControlCollectionは実装せずIList<T>のみIList、またはFormCollectionは upto のみ実装し、 は実装しICollectionませんICollection<T>。便利な操作を行う必要があるたびに、次のように、コレクション クラスを同等のジェネリック型に変換する必要がありますIEnumerable<T>Linq

this.Controls.OfType<Control>();

保持できる唯一のものが再びコントロールである場合に、Controlこのような操作で指定する必要があるのは奇妙です。ControlCollection

これらのコレクションが .Net 1.1 の時代に存在していたことを考えると、下位互換性を維持するためですか? そうだとしても、これらのコレクション (さらに多くのコレクションがあります) が、後方互換性を損なうことはないと私が信じている既存のものと一緒に、ジェネリック インターフェイスをさらに実装できないのはなぜですか。ジェネリックの重要な何かが欠けているかどうかはわかりません。アイデアが完全ではない可能性があります..

編集: WinFormsだけを念頭に置いていたときにこれを尋ねましたが、これはWPFのような新しいテクノロジーにも当てはまることがわかりました。@Dennis が指摘しているように、WPF にも非ジェネリック コレクションがあります。たとえば、WindowCollectionまたはItemCollection。WPF は .NET 3 とともにリリースされましたが、ジェネリックは .NET 2 で導入されました:-o

これに更新:

現在、これに対するチケットがあります: https://github.com/dotnet/winforms/issues/2644 (もちろん .NET Core)。

4

1 に答える 1

8

これらのコレクションが .Net 1.1 の時代に存在していたことを考えると、下位互換性を維持するためですか?

はい。ただし、ほとんどの場合、WinForms は 2005 年またはそれ以前から「機能が完全」になっているためです。

Feature Complete は、生命維持装置を使用していることを意味し、蘇生しないでください。

追加、再編集:

WindowsCollection は既に「特殊化」されており、Window から派生したクラスが含まれています。ここでは継承が適切なモデルであり、ジェネリックは必要ありません。

また、ItemCollection も意図的に非ジェネリックです。同時に異なるタイプであっても、すべてのタイプを含めることができるのは意図的な機能です。繰り返しますが、ジェネリックは必要ではなく、望ましくありません。

于 2012-09-05T12:18:47.307 に答える