-3

これは私が使用しているコードで、インスタンス化時にビルド エラーが発生しています。私の SpecialHandler が T が SpecialEntity として設定された BaseHandler 型であることが表示されない理由がわかりません

static class HandlerFactory
{
    public static BaseHandler<BaseEntity> Create(string typeString)
    {
        throw new NotImplementedException();
    }

    public static BaseHandler<T> Create<T>(string typeString )  where T : BaseEntity {
        if (typeString == "Special")
            **return new SpecialHandler();** //THERE'S BUILD ERROR HERE EVEN THOUGH Special Handler is inherits from type BaseHandler<T>
        else
            return null;
    }
}

public class BaseHandler<T>  where T : BaseEntity
{
    public T GetEntity()
    {
        throw new NotImplementedException();
    }
}

public class SpecialHandler : BaseHandler<SpecialEntity> {}

public class BaseEntity{}

public class SpecialEntity : BaseEntity{}
4

1 に答える 1

2

(私のサイキックデバッグスキルを使用して質問を推測します)

指定されていない限り (そしてとにかくインターフェイスでのみ機能します)、遺伝的パラメーターは不変です。つまり、正確です。
として定義されたコレクションは、 として定義されたコレクションまたはList<Mammal>として定義されたコレクションとはまったく関係がありません。List<Animal>List<Cat>

このCreateメソッドは、 aBaseHandler<BaseEntity>ではなく aBaseHandler<SpecialEntity>を返し、あなたのSpecialHandleris-aを返すと言っていますが、それは aBaseHandler<SpecialEntity>ではありませんBaseHandler<BaseEntity>

于 2013-10-29T08:16:01.757 に答える