- - PR -
[VB.NET] InternalDataCollectionBaseの不具合?
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-06-12 15:15
ずいぶんとご無沙汰してましたが、少し不可解な点を見つけて悩んでおります。
VB.NET2003で表題のInternalDataCollectionBaseクラスを継承させてオリジナルなDataRowCollectionのようなものを作ろうとしたのですが、内部で持っているListプロパティのArrayListのインスタンスがどうやっても作れません。 MyBase.NewでInternalDataCollectionBase自身は作られているようですが、InternalDataCollectionBaseが持つListプロパティにアクセスすると、「オブジェクトインスタンスが・・・」のエラーになります。 なお、ウォッチではListの中身は[Length=0]と出ていました。 ためしにVB2008でも同じことをやってみましたが、結果は同じ。ただ、ウォッチで見た中身がVB2008ですとNothingのままです。 普通にInternalDataCollectionBaseクラスの変数を作って、New InternalDataCollectionBaseとした後に、Countプロパティにアクセスしても同じ現象が起こります。 自分の理解に自信がないので、表題で「不具合?」と書きつつも、自分の使い方がそもそもおかしいのかとも思っています。 本件について何かご存知の方がいましたらご教授願います。 | ||||||||
|
投稿日時: 2008-06-12 15:50
InternalDataCollectionBaseクラスをReflectorで逆アセンブルすると、Listプロパティは以下のようになっています。
同じようにInternalDataCollectionBaseを継承しているConstraintCollectionクラスを逆アセンブルすると以下のようになっています。
おそらく、listはサブクラスで定義してListプロパティをOverrideしろってことなんだと思います。 なんで、こんな設計になってるかは分かりませんが。。。 | ||||||||
|
投稿日時: 2008-06-12 15:53
念のためリフレクターを通してみたら、以下のことがわかりました。
・コンストラクタでは何も行われていない。(実装コードなし) ・Countプロパティでは内部のList.Countを返している。 ・ListプロパティではNothingを返している。 DLLの実装コードが絶対に上記状態とは言い切れませんが、こちら側から追って得た結果としては上記状態でした。 ですので、仕様なのか不具合なのかは別として、当然の結果ということになりますね。 InternalDataCollectionBaseを使用するのはやめて、同じインターフェースを実装した形で作ることにします。 | ||||||||
|
投稿日時: 2008-06-12 15:56
burton999さん
ありがとうございます。 すれ違ってしまいました; やはり、そうなっていましたよね。 >おそらく、listはサブクラスで定義してListプロパティをOverrideしろってことなんだと思います。 >なんで、こんな設計になってるかは分かりませんが。。。 本当、不可解極まりないです。。。 お調べいただきありがとうございました! |
1