Generic


Int型の固定サイズ配列のクラス。 string など別の型をいれる場合は利用できないので 似たような別クラスを用意することになる。
public class IntFixedArray { public IntFixedArray( int num ) { _num = num; _data = new int[_num]; } public void Set( int i, int value ) { _data[i] = value; } public int Get( int i ) { return _data[i]; } int[] _data; int _num; }
object にすればすべての型を受け取ることができるが boxing(ボックス化) が発生して、データを取り出す時にどの型であるかチェックが必要。
public class FixedArray { public FixedArray( int num ) { _num = num; _data = new object[_num]; } public void Set( int i, object value ) { _data[i] = value; } public object Get( int i ) { return _data[i]; } object[] _data; int _num; }
型をパラメータ化する。 これで, int, string, など型ごとにコンパイラがクラスを生成するので コードのひとつで済む。
public class FixedArray<T> { public FixedArray( int num ) { _num = num; _data = new T[_num]; } public void Set( int i, T value ) { _data[i] = value; } public T Get( int i ) { return _data[i]; } T[] _data; int _num; }
FixedArray<int> a = new FixedArray<int>(10); a.Set( 0, 1 ); // コンパイル時に型チェックもしてもらえる。 a.Set( 0, "foo" ); FixedArray a = new FixedArray(10); a.Set( 0, "foo" ); // ここで 値型から参照型への変換( boxing )が入る。 a.Set( 0, 1 );