23

呼び出すことができるスーパークラスclass Aといくつかのサブクラスがclass a1 : Aありclass a2 : Aますa6 : A。myには、サブクラスの 1 つを作成してin にclass B追加する一連のメソッドがあります。List<A>B

現在持っているコードを短くしたい。だから書く代わりに

Adda1()
{
    aList.Add( new a1() );
}

Adda2()
{
    aList.Add( new a2() );
} 

...

Adda6()
{
    aList.Add( new a6() );
}

代わりに、これに似たものを書きたい

Add<T>()
{
    aList.Add( new T() );  // This gives an error saying there is no class T.
}

それは可能ですか?

TタイプAまたはそのサブクラスの1つである必要がある制約も可能ですか?

4

2 に答える 2

40

リーの答えは正しいです。

その理由は、呼び出すことができるようにするには、型パラメーターに制約をnew T()追加する必要があるためです。new()

void Add<T>() where T : new()
{
     ... new T() ...
}

タイプのT : Aオブジェクトを に追加できるように、制約も必要です。TList<A>

注:new()他の制約と一緒に使用する場合、制約は最後new()に来る必要があります。

関連している

于 2012-06-27T20:39:09.643 に答える
32
public void Add<T>() where T : A, new()
{
    aList.Add(new T());
}
于 2012-06-27T20:39:16.407 に答える