使用List<derivedClass>覆盖List<baseClass>

6

我有如下这样的基类:

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

我的问题是,我该如何管理它。目前编译器对此不满意(而且老实说,这看起来有点奇怪)。所以我想做的事情是不可能的吗?如果是,为什么?或者它是可能的,只是我走错了方向?


与论坛网站不同,我们不在 [so] 上使用“感谢”或“感激任何帮助”的用语或签名。请参阅“是否应该从帖子中删除“Hi”,“thanks”,标语和敬礼?” - John Saunders
2个回答

10
您可以使用泛型。
public class BaseScene<T>
    where T : SceneModel
{
    public IList<T> Models {get; set;}
}

public class Scene : BaseScene<SceneModel>
{
}

public class WorldScene : BaseScene<WorldModel>
{    
}

每种场景都将由相应的模型类型进行参数化。因此,您将为每个场景拥有强类型的模型列表。


哇,我从来不知道如何做到这一点。非常感谢你! - AxelWass
这真的非常有用,它基本上使我的项目免受了很多不必要的反射或大量的代码重复。非常感谢! - Frederik

2
这是根本不可能的。
如果您这样写会发生什么?
Scene x = new WorldScene();
x.Models.Add(new OtherModel());

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

相反,您应该将基类定义为通用类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接