2012-02-06 10 views
0

カプセル化されたメンバーイベントをコミットしようとしています。私に説明させてください。私は、MyClassB _objのプライベートメンバーを持つMyClassAを持っています。カプセル化メンバーイベントの消費

public class MyClassA 
{ 
    private MyClassB _obj; 
    public MyClassA() 
    { 
     _obj = new MyClassB(); 
    } 
} 

MyClassBにはSaveProgressイベントがあります。

クライアントアプリケーションでは、MyClassBは表示されません。

public partical class _Default: System.Web.UI.Page 
{ 
    protected void button1_Click(object sender, EventArgs e) 
    { 
     MyClassA objA = new MyClassA(); 
     // We need to handle it's event through MyClassA 
     // objA.SaveProgress += new EventHandler<SaveProgressEventArgs>(objA_SaveProgress); 
    } 
} 

どうすればいいですか?ありがとう。

答えて

2

OBJAのSaveProgressイベントのみ、あなたはこれを使用することができ、MyClassBクラスのイベントに転送されている場合:

public event EventHandler<SaveProgressEventArgs> SaveProgress 
{ 
    add 
    { 
      lock(_obj.Event) 
       _obj.Event += value; 
    } 
    remove 
    { 
      lock(_obj.Event) 
      _obj.Event -= value; 
    } 
} 
+0

はい、それは私が知りたいものです。ありがとう。これに2つの変更があります:1)publicイベントEventHandler SaveProgress; 2)lock(_obj.Event)は "イベントは+ =または - =の左側にしか現れません"というエラーを出します。だから私はそれらを取り除いた(ロックなしの問題?)。 –

+0

ありがとう、私は例にイベントの種類を追加します。 ロックなしでいいはずです。私はもともとロックなしでそれを持っていたが、私はそれが正しいと私はロックを追加していたことを確認するためにmsdnを確認した。私は最新のコンパイラがイベントをロックさせないことを忘れていました。 – JKor