- PR -

タイプセーフなArrayListの作り方

1
投稿者投稿内容
MUSE
常連さん
会議室デビュー日: 2003/04/06
投稿数: 42
投稿日時: 2003-04-06 12:56
こんにちは。LEDです。
タイプセーフなArrayListの作り方について教えて下さい。
以下のようにCarという車を表すクラスを作成しました。
コード:
public class Car
{
	public Car()
	{
	}

	private string color;

	public string Color
	{
		get
		{
			return color;
		}
		set
		{
			color = value;
		}
	}
}


このクラスに対するコレクションクラスとしてCarsという名前のクラスを作成したいと思っています。CarsはArrayListで持っているようなメソッドを持たせたいと思っています。
方法はいくつかあると思うのですが、どのような方法があって、それぞれどのような特徴があるのか教えていただけますか? できれば、コードの例があれば助かります。
よろしくお願いいたします。

#C++のテンプレート(CArray)のようなものはC#ではないんですかね?
karajan
ベテラン
会議室デビュー日: 2002/07/05
投稿数: 89
投稿日時: 2003-04-06 20:16
karajanです。
私は独自の型のコレクションを作成する場合は、
System.Collections.CollectionBase
を使用してます。

これで必要な部分を実装してあげるのが手っ取り早いのではないでしょうか。

--MSDNより--
実装時の注意: この基本クラスは、厳密に型指定されたカスタム コレクションを簡単に作成できるように提供されています。実装する場合は、独自のクラスを作成するのではなく、この基本クラスを拡張してください。









MUSE
常連さん
会議室デビュー日: 2003/04/06
投稿数: 42
投稿日時: 2003-04-07 14:52
ありがとうございます。
このようなクラスがあるとは知りませんでした。
お世話になりました。
mei
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 114
投稿日時: 2003-04-08 00:36
用途によってはDataTableとかが使えるかも知れません。

こんな感じ。

DataTable dt = new DataTable();
// int型のみを入れる
dt.Columns.Add("MyColumn", typeof(int));

DataRow dr = dt.NewRow();
dr[0] = 10; // int型なのでOK
dt.Rows.Add(dr);

dr = dt.NewRow();
dr[0] = "ABC"; // string型なので例外発生
dt.Rows.Add(dr);

中に入っている型は同一であることは保証されますが、
チェックは実行時なので、C++のテンプレートみたいな、
コンパイル時チェックを希望する場合は向きません。

その場合はやはり、karajanさんの回答にあるように、
独自に作るしかないです。

早くGenericsが欲しい・・・
1

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