繁体   English   中英

C#:继承事件问题-继承类中的事件始终为null

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM