2012-10-27 34 views
3

我有基类是这样的:覆盖列表<baseClass>与名单<derivedClass>

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

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

+0

与论坛网站不同,我们不使用“谢谢”或“任何帮助表示赞赏”,或在[so]上签名。请参阅“[应该'嗨','谢谢',标语和致敬从帖子中删除?](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be -removed-from-posts)。 –

回答

5

您可以使用泛型

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

public class Scene : BaseScene<SceneModel> 
{ 
} 

public class WorldScene : BaseScene<WorldModel> 
{  
} 

每种类型的场景将通过相应的模型类型的参数进行调整。因此,您将强烈地键入每个场景的模型列表。

+0

哇,我从来不知道该怎么做,非常感谢! – AxelWass

2

这是根本不可能的。

,如果你写

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

会发生什么,你只是添加了OtherModelList<WorldModel>

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