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

时间:2009-08-28 13:26:53

标签: c# events inheritance event-handling

我有两种类型的对象,父母和孩子。我有这两个对象的抽象类。有两种类型的父母,ParentA,ParentB,有两种类型的孩子,ChildA,ChildB。这些都继承了相应的基类,即ParentA:Parent,ParentB:Parent,ChildA:Child,ChildB:Child。

每位家长都有一个孩子的集合。 A型父母只能有A型孩子,而B型父母只能有TypeB孩子。

要将子项添加到父项,我使用在父抽象类中定义的方法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对象中的事件,我看到在上面的subcsription代码之后,事件仍为null。为什么这个事件仍然是空的?

4 个答案:

答案 0 :(得分:2)

谢谢大家,但现在一切正常。我觉得这很愚蠢,但不知怎的,它昨天整天都在躲避我。实际上,问题就在于:

child.ChildPropertyChanged += ChildPropertyChanged;

其中ChildPropertyChanged是事件而不是方法。显然,正确的方法就像是

child.ChildPropertyChanged += OnChildPropertyChanged;

其中OnChildPropertyChanged是一种方法。

我正在将我的代码转换为VB,我习惯用一行来引发事件:)

答案 1 :(得分:1)

缺少任何进一步的代码,我可以看到的唯一问题是您可能无法将事件附加到正确的对象。也许这样的事情会解决它:

internal void addChild(Child child)
{        
    //Code I execute to add the child        
    child.ChildPropertyChanged += ChildPropertyChanged;
}

答案 2 :(得分:0)

这可能是因为没有其他对象订阅了客户端事件。

在这种情况下,客户端事件为空,因此父事件。

试试这个:

var childA = new ChildA();
var parentA = new ParentA();

childA .PropertyChanged = new ChildAPropertyChangedEventHandler(PropertyChangedMethod);
parentA.AddChild(childA );

答案 3 :(得分:0)

代码示例并不是那么完整,因此很难猜出问题是什么。

但是你是否在ChildA类中创建了一个新的事件定义来隐藏Child类中的原始事件定义?