Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:继承事件问题-继承类中的事件始终为空_C#_Events_Inheritance_Event Handling - Fatal编程技术网

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

C#:继承事件问题-继承类中的事件始终为空,c#,events,inheritance,event-handling,C#,Events,Inheritance,Event Handling,我有两种类型的对象:父对象和子对象。对于这两个对象,我有一个抽象类。有两种类型的父母,父母A,父母B,还有两种类型的孩子,孩子A,孩子B。这些都继承了相应的基类,即ParentA:Parent、ParentB:Parent、ChildA:Child、ChildB:Child 每个家长都有一个孩子的集合。类型A的父级只能有类型A的子级,类型B的父级只能有类型B的子级 要向父级添加子级,我使用父级抽象类中定义的addChild(child)方法。此方法对两个父类型执行完全相同的操作。在这个方法中,我

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

每个家长都有一个孩子的集合。类型A的父级只能有类型A的子级,类型B的父级只能有类型B的子级

要向父级添加子级,我使用父级抽象类中定义的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);
现在,当我执行以下代码时:

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对象中的事件,我看到在上面的子脚本代码之后,事件仍然是空的。为什么此事件仍然为空?

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

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

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

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

试试这个:

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

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

代码示例实际上并没有那么完整,因此很难猜测问题id是什么


但是可能是您在ChildA类中创建了一个新的事件定义,它在ChildA类中隐藏了原始的事件定义吗?

谢谢大家,但是现在一切都正常了。我觉得自己很愚蠢,但不知怎么的,我昨天一整天都在逃避它。事实上,序言是这样的:

child.ChildPropertyChanged += ChildPropertyChanged;
其中ChildPropertyChanged是事件,而不是方法。显然,正确的方法是

child.ChildPropertyChanged += OnChildPropertyChanged;
其中OnChildPropertyChanged是一个方法


我正在从VB转换代码,在VB中,我习惯于用一行代码引发事件:)

rChild对象来自何处?您必须粘贴更多代码-您是如何定义事件的,在哪个类中,etcI无法重现该问题;正如@Grzenio所指出的,我们似乎需要更多的细节。@Fredrik:“在我的机器上工作!”@BFree::o)是的,听起来有点像,不是吗。这是真的;我重新创建了代码场景(尽我所能),并让订阅、引发和调用附加的事件处理程序的子事件…只是对命名约定的注释。您正在XYZ上创建一个函数。通常,在.NET framework中,当存在OnXYZ函数时,它与类本身引发的XYZ事件相关。它通常不是从引用对象接收的事件的事件处理程序。因此,将此名称用于事件处理程序可能会令人困惑。