1
    class Program
    {
       public delegate void MyDelatage();

       public event MyDelatage MyEvent;

       public Program()
       {
           MyEvent += Fun;
       }
       public void Fun()
       {
          Console.WriteLine("Base class");
       }
       public void RaiseMyEvent()
       {
          if(MyEvent != null)
                MyEvent();
           }
       }

    class Child : Program
    {
        public void Start()
        {
           //base.MyEvent();//not allowed
           RaiseMyEvent();
         }
     }

子クラスで MyEvent にアクセスできないのはなぜですか?

4

2 に答える 2

2

event派生クラスでは表示されないプライベート フィールドの生成を含む一種の構文糖衣です。

于 2012-11-23T11:43:42.257 に答える
0

「...他のクラスの基本クラスとして使用できるクラスを作成するときは、イベントが、それらを宣言したクラス内からのみ呼び出すことができる特別なタイプのデリゲートであるという事実を考慮する必要があります。派生クラス基本クラス内で宣言されたイベントを直接呼び出すことはできません。基本クラスによってのみ発生するイベントが必要な場合もありますが、ほとんどの場合、派生クラスが基本クラスのイベントを呼び出すことができるようにする必要があります。... "(http ://msdn.microsoft.com/en-us/library/hy3sefw3(v = vs.80).aspx

基本クラスに次のようなものを書く必要があります。

public event EventHandler<EventArgs> OnButtonClick;
...
protected virtual void OnReady(object sender, EventArgs e) {
    if(OnButtonClick != null) {
        OnButtonClick(sender, e);
    }
}

そして、あなたの子クラスでこのメソッドを呼び出します、すなわち:

base.OnReady(sender, e);
于 2012-11-23T11:49:39.423 に答える