【发布时间】:2017-08-26 07:12:09
【问题描述】:
所以我有这个抽象类。其中有一个抽象类型列表
public abstract class BaseClass
{
public abstract List<A> History { get; set; }
和继承者类。
public class ConcreteClass : BaseClass
{
public override List<B> History { get; set; }
我的问题很简单。为什么这会返回错误。 A 是 b 继承的抽象类。那么为什么我不能让一个具体的属性覆盖一个抽象的属性呢?
注意:由于其他问题,我不能在基类中使用泛型。在这个问题上有所澄清。我正在使用 mvc,由于动态类型的一些问题,我不能说 BaseClass<t> 在其他一些领域,调用 GetHistory() 方法的方法需要它返回具体列表而不是抽象列表。所以我被困在岩石和坚硬的地方之间。
【问题讨论】:
-
因为如果我这样做
BaseClass c = new ConcreteClass();,那么我必须能够将A的any 子类的实例添加到c.History。 -
嗯,这取决于你想要做什么。你能退后一步,描述一下你想用这个解决什么问题吗?
-
A和B是否都实现了相同的接口?如果它们以类似的方式使用,那么可能存在一些相似之处。在这种情况下,您可以将列表设为 IHistory 或其他类型。List<IHistory> History { get; set;} -
@trinityalps:您还没有真正添加到问题中,您实际上想要做什么。或者详细说明“MVC 中的动态类型问题”是什么意思。
-
Why does this return an error.在这种情况下,与我们分享编译器错误很重要。它让帮助您变得更加轻松。
标签: c#