【发布时间】:2014-04-09 12:17:14
【问题描述】:
我正在尝试像这样覆盖基本属性:
public class Node {}
public class SubNode : Node { }
public class NodeViewModel<T> where T : Node
{
public virtual T Data { get; set; }
}
public class SubNodeViewModel : NodeViewModel<SubNode>
{
public override SubNode Data { get; set; }
}
...
List<NodeViewModel<Node>> l = new List<NodeViewModel<Node>>();
l.Add(new SubNodeViewModel()); // Cannot convert from SubNodeViewModel to NodeViewModel<Node>
...
我想我一定是误解了继承的基本原理。为什么我不能这样做?
我想我对为什么会这样感到困惑:
Node node;
SubNode subnode;
node = subnode; // I work just fine!
但不是这个:
NodeViewModel<Node> node;
SubNodeViewModel subnode;
node = subnode; // I don't work. Also, I hate you!
【问题讨论】:
-
只要删除
public override SubNode Data { get; set; },你就会得到你想要的。
标签: c# generics inheritance polymorphism