【问题标题】:override List<baseClass> with List<derivedClass>用 List<derivedClass> 覆盖 List<baseClass>
【发布时间】:2012-10-17 19:04:53
【问题描述】:

我有这样的基类:

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

所以我的问题是,我该如何处理。就目前而言,编译器对此并不满意(老实说,无论如何我看起来有点奇怪)。那么我想做的事情是不可能的吗?如果是这样,为什么?还是有可能,我只是走错了路?

【问题讨论】:

标签: c# derived-class base-class


【解决方案1】:

你可以使用泛型

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

public class Scene : BaseScene<SceneModel>
{
}

public class WorldScene : BaseScene<WorldModel>
{    
}

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

【讨论】:

  • 哇,我从来不知道该怎么做。非常感谢!
  • 这真的很有用,这基本上使我的项目免于进行大量不必要的反射或大量代码重复。非常感谢!
【解决方案2】:

这基本上是不可能的。

如果你写会发生什么

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

您刚刚将OtherModel 添加到List&lt;WorldModel&gt;

相反,您应该将基类设为通用。

【讨论】:

    猜你喜欢
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    相关资源
    最近更新 更多