タイトル : Re: KeyedCollectionについて 投稿日 : 2008/05/16(Fri) 17:41 投稿者 : よねKEN
> KeyedCollectionクラスを継承したクラスに型パラメータを定義して > その型をKeyedCollectionのキーの型に指定すると例外が発生します。 > > Public Class MyCollection(Of TKey, TValue) > Inherits KeyedCollection(Of TKey, TValue) 何の例外がどこで発生していますか?(後述されているTypeLoadExceptionですか?) 例外が発生している箇所を見れば、問題箇所は特定できると思いますが。 KeyedCollectionコレクションを継承する場合、最低限、GetKeyForItemメソッドを オーバーライドする必要がありますが、どのように実装していますか? 試しに以下のように空実装をした場合、とりあえずコンパイルは通ります。 Public Class MyCollection(Of TKey, TValue) Inherits KeyedCollection(Of TKey, TValue) Protected Overrides Function GetKeyForItem (item As TValue) As TKey ' 要実装 End Function End Class しかし、具体的に実装しようとした場合、 TValue型がどんな型かを予め知っていないとこのメソッドを実装して TKey型を返すのは困難なように思います。(条件により不可能ではないと思いますが) そういう意味で、KeyedCollectionを継承する場合、 TKeyやTValueについては閉じた型(型パラメータを含まない具体的な型)を 指定して継承するものではないかと思います。 |