[英]How can I access a Child class's interface property when that child is stored in a list as its Parent?
我认为这篇文章的标题可能无法很好地解释我的问题,所以这里有一些代码应该希望能更好地解释一下:
interface IFoo {
IFoo Bar {get; set;}
}
class Parent {
}
class Child1 : Parent, IFoo {
}
class Child2 : Parent, IFoo {
}
class Manager {
List<Parent> Parents = new List<Parent>();
Parents.Add(new Child1());
Parents.Add(new Child2());
// I want to do something like this:
Parents[0].Bar = Parents[1];
}
我相信(Parents[0] is IFoo)
将评估为true
,但我不能使用Parents[0].Bar
因为Parent
不包含Bar
的定义。 你能解释一下这是为什么吗? 另外,我怎么能有效地做同样的事情(至少在我脑海里) Parents[0].Bar = Parents[1]
应该做什么?
希望这是有道理的。 如果需要,我会尽力澄清事情。 在此先感谢您的光临!
使用类型转换:
((IFoo)Parents[0]).Bar
但实际上,如果你依赖于实体,那么你的设计就是糟糕的设计。
如果要进行分配,则需要让代码具有与自己相同的信息,以及与Manager类相同的信息。 这意味着你必须告诉类Parent它知道IFoo,这意味着:
abstract class Parent : IFoo
{
public abstract IFoo Bar { get; set; }
}
它现在还声明您无法单独实例化Parent。 从您的评论中,它似乎有意义(您说父母应该没有Bar的实现,只知道它)。 如果这是有意义的,那么它是抽象的,但如果不删除摘要并将Bar的实现添加到Parent,或者如果每个子项的实际实现不同,则将其设置为虚拟。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.