2009-08-28 18 views
1

私はParentsとChildrenの2種類のオブジェクトを持っています。私はこれらの2つのオブジェクトの抽象クラスを持っています。両親にはParentA、ParentBの2種類があり、ChildA、ChildBの2種類があります。これらはすべて対応する基本クラス、つまりParentA:Parent、ParentB:Parent、ChildA:Child、ChildB:Childを継承しました。C#:継承イベントの問題 - 継承したクラスのイベントは常にnullです

各親には子供のコレクションがあります。タイプA親はタイプAの子のみを持ち、タイプBの親はタイプBの子を持つことができます。

子を親に追加するには、親抽象クラスで定義されたaddChild(子)メソッドを使用します。このメソッドは、両方の親タイプに対してまったく同じ処理を実行します。この方法では、私は親が子供の出来事に従属するようにしたい。私は上記のsubcsriptionコードの後、イベントがあることがわかり、

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

parentA.addChild(childA); 

とchildAオブジェクトでのイベントに従います。今、私は次のコードを実行するとき

internal void addChild(Child child) 
{ 
    //Code I execute to add the child 

    rChild.ChildPropertyChanged += ChildPropertyChanged; 
} 

:私は、次のコードを使用しますまだヌルです。なぜこのイベントはまだヌルですか?

+1

rChildオブジェクトから来ているを高めるために、単一のラインに慣れてVBからオーバー私のコードを変換していますか? – CAbbott

+0

より多くのコードを貼り付ける必要があります - どのようにイベントやクラスなどを定義しましたか – Grzenio

+1

私は問題を再現できません。 @Grzenioが示すように、私たちはもっと詳細を必要とします。 –

答えて

2

皆様、ありがとうございますが、すべて正常に動作します。私はそれが愚かだと思うが、どういうわけか昨日私は一日中それを逃した。実際には、プロンプトは次のような行です。

child.ChildPropertyChanged += ChildPropertyChanged; 

ここでChildPropertyChangedはイベントであり、メソッドではありません。正しい方法は、明らかに、次のようなものです。

child.ChildPropertyChanged += OnChildPropertyChanged; 

ここで、OnChildPropertyChangedはメソッドです。

は、私がイベント:)

+2

あなたの命名規則にちょうどコメント。OnXYZ関数を作成しています。通常、.NETフレームワークでは、OnXYZ関数が存在する場合、それはクラス自体が発生するXYZイベントに関連しています。通常、参照されるオブジェクトから受け取るイベントのイベントハンドラではありません。したがって、この名前をイベントハンドラに使用すると、混乱することがあります。 – Pete

1

これ以上のコードがないと、イベントを正しいオブジェクトにアタッチできないことがわかります。

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

おそらく、他のオブジェクトがクライアントイベントを購読していないことが原因である可能性があります。

この場合、クライアントイベントはnullであり、そのために親イベントです。コード例では、本当に完全ではないので、何の問題IDを推測することは困難である

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

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

はこれを試してみてください。

しかし、チャイルドクラスの元のイベント定義を隠すChildAクラスの新しいイベント定義を作成した可能性はありますか?