C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

コレクション内にコレクションを追加


(過去ログ 8 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■8509 / inTopicNo.1)  コレクション内にコレクションを追加
  
□投稿者/ xuexue 二等兵(1回)-(2006/11/24(Fri) 15:02:43)

分類:[C#] 


分類:[C#] 

いつも勉強させていただいています。
最近、C#(ver 2003)を始めたのですが、以下のことが出来なくて困っています。

・コレクションAを持つクラスAAが定義されている
・コレクションBを持つクラスBBが定義されている
・A,B各コレクションは「System.Collections.ArrayList」型を使用し、
 AA,BB各クラスのコンストラクタでnewされる。
・クラスAAとクラスBBは、それぞれ「Add」や「Remove」というメソッドを持ち、
 それぞれ、A内、B内のセクションを変更できる

※つまり、
 1:コレクションAに要素を追加したい場合は
   AA.add()
 2:コレクションBに要素を追加したい場合は
   AA.A[index].BB.add()(実際にはコンパイルエラーになりますが)
 というイメージです。

で、2番目の回避策として、AAクラスに、parentというプロパティを持たせて、
指定したインデックス番号のBBを取得したいのですが、うまくいきません。
parent[インデックス番号].add() とか、
parent["要素の名前"].add()   のように、
コレクションBを操作したいのですが、この、parentプロパティは
どのように定義すべきでしょうか?
メソッドではなく、プロパティで実現したいのです。

ご教示頂きたく、宜しくお願いいたします。

0
引用返信 編集キー/
■8510 / inTopicNo.2)  Re[1]: コレクション内にコレクションを追加
□投稿者/ 囚人 伍長(48回)-(2006/11/24(Fri) 15:06:45)

分類:[C#] 

違和感が満載ですが、まず2番目が何故コンパイルエラーになるか理解できますか?

0
引用返信 編集キー/
■8512 / inTopicNo.3)  Re[2]: コレクション内にコレクションを追加
□投稿者/ xuexue 二等兵(3回)-(2006/11/24(Fri) 15:12:01)

分類:[C#] 

囚人 様

早速のレクチャーありがとうございます。
AA.add()が呼ばれて初めてBBがnewされるから、確定されていないために、コンパイルエラーになるのだと思います。

No8510に返信(囚人さんの記事)
> 違和感が満載ですが、まず2番目が何故コンパイルエラーになるか理解できますか?

0
引用返信 編集キー/
■8514 / inTopicNo.4)  Re[3]: コレクション内にコレクションを追加
□投稿者/ 囚人 伍長(49回)-(2006/11/24(Fri) 15:19:57)

分類:[C#] 

>AA.add()が呼ばれて初めてBBがnewされるから、確定されていないために、コンパイルエラーになるのだと思います。

いいえ、恐らく違います。それももちろん問題ですが、それだと実行時エラーです。
コンパイルエラーのメッセージは「BB というプロパティ、フィールドがありません」となっているかと思われます。ArrayList にはそのようなプロパティがないからです。
とりあえずの回避策としては

(B)(AA.A[index]).BB.add()

です。

蛇足ですが、

「コレクションを包含しているクラスにコレクションを操作するメソッドはできるだけ持たせない」
何故なら、コレクションを操作するパスが2箇所にできるからです。
クライアントはどちらを使ったらよいのか、実装が違うのか、と悩む必要がでてきてよい設計ではありません。

例)
AA.add(b)
AA.A.Add(b)

「ArrayList を外部インターフェースに使わない」
何故なら、ArrayList は Object クラスを格納する汎用コンテナなので、クライアントは何を入れたらいのか悩む必要がでてきてよい設計ではありません。
この場合は型が制限できるように、CollectionBase を継承した型制限コレクションクラスを作ります。

例)
public class A : CollectionBase
{

}



0
引用返信 編集キー/
■8515 / inTopicNo.5)  Re[4]: コレクション内にコレクションを追加
□投稿者/ 囚人 伍長(50回)-(2006/11/24(Fri) 15:22:50)

分類:[C#] 

間違えました。
(BB)(AA.A[index]).add()
です。

0
引用返信 編集キー/
■8516 / inTopicNo.6)  Re[5]: コレクション内にコレクションを追加
□投稿者/ xuexue 二等兵(4回)-(2006/11/24(Fri) 15:48:27)

分類:[C#] 

囚人 様

詳しくお話をお聞かせいただき、ありがとうございました。
今後のために、良く覚えておこうと思います。
今回は、既存のVB6でコーディングされたものをC#に移行するということで
この設計は崩せないようです。

ご教示いただいたやり方を試してみましたが、うまくいきました!
本当に、ありがとうございました。



0
引用返信 編集キー/
■8517 / inTopicNo.7)  Re[6]: コレクション内にコレクションを追加
□投稿者/ xuexue 二等兵(5回)-(2006/11/24(Fri) 15:50:14)

分類:[C#] 

あ、解決です・・・。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -