【发布时间】:2014-05-19 01:26:30
【问题描述】:
我想要做的是使用一个调用来返回一个基类的 2 个扩展的集合。这是我所拥有的:
public interface IView
{
int Id { get; set; }
}
然后我有一个实现这个接口的域模型
public class View: IView
{
public int Id { get; set; }
}
然后我有一些继承自基类的类
public class ViewA: View
{
public string PropertyA { get; set; }
}
和
public class ViewB: View
{
public string PropertyB { get; set; }
}
从这里我有一个我试图包含两者的列表:
var views = new List<IView>();
并从我的基地创建一个视图,因为 ViewA 和 ViewB 都有 Ids
var view = new View();
view.Id = 1;
现在我正在尝试将其转换为 ViewA,以便我可以像这样设置 PropertyA:
var viewA = (ViewA)view;
但调试器告诉我我不能将“视图”转换为 ViewA(编译得很好)。
Unable to cast object of type 'View' to type 'ViewA'
我确定在我对接口的理解中遗漏了一些东西 -> 基类继承,但我认为您可以通过这种方式将“较小”类转换为“更多定义”类。阅读有关协变、逆变和分配兼容性的信息,我认为我应该能够做到这一点;显然不是..
我想要做的是返回这两种视图的集合(因此是列表),以便我可以在需要它们时将它们转换为更定义的视图,并在我只需要公共属性时将它们保留为基本视图.
我宁愿在 ViewA 和 ViewB 中没有重复的属性,我正在尝试做的事情是可能的还是我只是把这一切都弄错了?
【问题讨论】:
标签: c# inheritance polymorphism