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 回答