11

それらの実装にデフォルトのコンストラクターがない場合、型パラメーターを抽象クラスの具体的な実装に制限することは可能ですか?

たとえば、私が持っている場合:

public abstract class Animal
{
    private Animal()
    {
    }

    public Animal(string name)
    {
        // ...
    }

  // ...
}


public class Penguin : Animal
{
    // ...
}


public class Chimpanzee : Animal
{
    // ...
}

また、次のクラスもあります。

public class ZooPen<T>
   where T : Animal
{
    // ...
}

と を許可new ZooPen<Penguin>()new ZooPen<Chimpanzee>()たいのですが、 を許可したくありませんnew ZooPen<Animal>()

これは可能ですか?

4

3 に答える 3

12

制約を追加できnew()ます。これには、クラスが抽象ではなく、デフォルトのコンストラクターがあることが必要です。

于 2013-05-28T15:49:03.443 に答える