- PR -

[VB.NET] InternalDataCollectionBaseの不具合?

1
投稿者投稿内容
KIMERA
大ベテラン
会議室デビュー日: 2003/02/28
投稿数: 112
お住まい・勤務地: 兵庫県・大阪府
投稿日時: 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プロパティにアクセスしても同じ現象が起こります。

自分の理解に自信がないので、表題で「不具合?」と書きつつも、自分の使い方がそもそもおかしいのかとも思っています。

本件について何かご存知の方がいましたらご教授願います。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2008-06-12 15:50
InternalDataCollectionBaseクラスをReflectorで逆アセンブルすると、Listプロパティは以下のようになっています。

コード:
protected virtual ArrayList List
{
    get
    {
        return null;
    }
}



同じようにInternalDataCollectionBaseを継承しているConstraintCollectionクラスを逆アセンブルすると以下のようになっています。

コード:
private readonly ArrayList list;
protected override ArrayList List
{
    get
    {
        return this.list;
    }
}



おそらく、listはサブクラスで定義してListプロパティをOverrideしろってことなんだと思います。
なんで、こんな設計になってるかは分かりませんが。。。
KIMERA
大ベテラン
会議室デビュー日: 2003/02/28
投稿数: 112
お住まい・勤務地: 兵庫県・大阪府
投稿日時: 2008-06-12 15:53
念のためリフレクターを通してみたら、以下のことがわかりました。

・コンストラクタでは何も行われていない。(実装コードなし)
・Countプロパティでは内部のList.Countを返している。
・ListプロパティではNothingを返している。

DLLの実装コードが絶対に上記状態とは言い切れませんが、こちら側から追って得た結果としては上記状態でした。
ですので、仕様なのか不具合なのかは別として、当然の結果ということになりますね。

InternalDataCollectionBaseを使用するのはやめて、同じインターフェースを実装した形で作ることにします。
KIMERA
大ベテラン
会議室デビュー日: 2003/02/28
投稿数: 112
お住まい・勤務地: 兵庫県・大阪府
投稿日時: 2008-06-12 15:56
burton999さん

ありがとうございます。
すれ違ってしまいました;

やはり、そうなっていましたよね。

>おそらく、listはサブクラスで定義してListプロパティをOverrideしろってことなんだと思います。
>なんで、こんな設計になってるかは分かりませんが。。。

本当、不可解極まりないです。。。

お調べいただきありがとうございました!
1

スキルアップ/キャリアアップ(JOB@IT)