5

私はこのような基本クラスを持っています:

public class Scene
{
    public IList<SceneModel> Models {get; set;}
}

public class SceneModel { }

次のような派生クラス:

public class WorldScene : Scene
{
    public override IList<WorldModel> Models {get; set;}
}

public class WorldModel : SceneModel { }

だから私の質問は、これをどのように管理するかです。現状では、コンパイラはこれに満足していません(そして、正直なところ、とにかく私には少し奇妙に見えます)。それで、私がやろうとしていることは不可能ですか?もしそうなら、なぜですか?それとも可能で、私はそれを間違った方法で行っていますか?

4

2 に答える 2

8

ジェネリックを使用できます

public class BaseScene<T>
    where T : SceneModel
{
    public IList<T> Models {get; set;}
}

public class Scene : BaseScene<SceneModel>
{
}

public class WorldScene : BaseScene<WorldModel>
{    
}

各タイプのシーンは、対応するモデルタイプによってパラメータ化されます。したがって、各シーンのモデルのリストを強く入力することになります。

于 2012-10-27T23:42:57.557 に答える
2

これは基本的に不可能です。

あなたが書くとどうなるでしょう

Scene x = new WorldScene();
x.Models.Add(new OtherModel());

にを追加しOtherModelましたList<WorldModel>

代わりに、基本クラスをジェネリックにする必要があります。

于 2012-10-27T23:43:29.727 に答える