[英]C#: Inheritance Event Problem - Event in inherited class is always null
我有2种类型的对象:父母和孩子。 我对这两个对象有一个抽象类。 有2种类型的父母,ParentA,ParentB和2种类型的孩子,ChildA,ChildB。 这些都继承了它们相应的基类,即ParentA:Parent,ParentB:Parent,ChildA:Child,ChildB:Child。
每个父母都有一个孩子的集合。 A型父母只能有A型孩子,B型父母只能有B型孩子。
要将子级添加到父级,我使用在Parent抽象类中定义的方法addChild(child)。 对于两种父类型,此方法执行的方式完全相同。 在这种方法中,我希望父母服从于孩子的事件。 我使用以下代码:
internal void addChild(Child child)
{
//Code I execute to add the child
rChild.ChildPropertyChanged += ChildPropertyChanged;
}
现在,当我执行以下代码时:
ParentA parentA = new ParentA();
ChildA childA = new ChildA();
parentA.addChild(childA);
并跟随childA对象中的事件,我看到在上面的子脚本代码之后,该事件仍然为null。 为什么此事件仍然为空?
谢谢大家,但是现在一切正常。 我为此感到愚蠢,但昨天却整天不知所措。 确实,问题在于:
child.ChildPropertyChanged += ChildPropertyChanged;
其中ChildPropertyChanged是事件而不是方法。 显然,正确的方法是
child.ChildPropertyChanged += OnChildPropertyChanged;
其中OnChildPropertyChanged是一种方法。
我正在从VB转换我的代码,在那我习惯了一行来引发一个事件:)
缺少任何进一步的代码,我可以看到的唯一问题是您可能未将事件附加到正确的对象。 也许像这样可以解决它:
internal void addChild(Child child)
{
//Code I execute to add the child
child.ChildPropertyChanged += ChildPropertyChanged;
}
可能是因为没有其他对象订阅客户端事件。
在这种情况下,客户端事件为null,因此父事件为null。
尝试这个:
var childA = new ChildA();
var parentA = new ParentA();
childA .PropertyChanged = new ChildAPropertyChangedEventHandler(PropertyChangedMethod);
parentA.AddChild(childA );
该代码示例并不是真的那么完整,因此很难猜测问题ID是什么。
但是,是否可能是您在ChildA类中创建了一个新的事件定义,从而在Child类中隐藏了原始事件定义?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.