我有两种类型的对象,父母和孩子。我有这两个对象的抽象类。有两种类型的父母,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。为什么这个事件仍然是空的?
答案 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类中的原始事件定义?