使用List <derivedclass> </derivedclass> </baseclass>覆盖List <baseclass>

时间:2012-10-27 23:39:19

标签: c# derived-class base-class

我有这样的基类:

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 { }

所以我的问题是,我该如何管理呢。目前编译器对此并不满意(说实话,无论如何它看起来有点奇怪)。那么我正在努力做什么不可能?如果是这样,为什么?或者它是否可能,我只是以错误的方式去做?

2 个答案:

答案 0 :(得分:7)

您可以使用泛型

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

public class Scene : BaseScene<SceneModel>
{
}

public class WorldScene : BaseScene<WorldModel>
{    
}

每种类型的场景都将通过相应的模型类型进行参数化。因此,您将为每个场景提供强类型的模型列表。

答案 1 :(得分:2)

这根本不可能。

如果你写

会发生什么
Scene x = new WorldScene();
x.Models.Add(new OtherModel());

您刚刚向OtherModel添加了List<WorldModel>

相反,您应该使基类通用。