2012-01-31 15 views
0

仮想イベント&を使用して、それを派生クラスで上書きします。以下はコードスニペットですが、仮想イベントを宣言しているときに警告メッセージが表示されます。仮想イベントの警告メッセージ

   using System; 
       using System.Collections.Generic; 
       using System.Linq; 
       using System.Text; 

       namespace ConsoleApplication6 
       { 
        class Program 
        { 
         static void Main(string[] args) 
         { 
          DeriveClass obj = new DeriveClass(); 
          obj.myEvent += new EventHandler(obj_myEvent); 
          obj.MyFunction(); 

          Console.ReadLine(); 
         } 

         static void obj_myEvent(object sender, EventArgs e) 
         { 
          Console.WriteLine("Event fired....."); 
         } 
        } 

        public abstract class BaseClass 
        { 
         // I get warning on this line - Warning 1 The event 'ConsoleApplication6.BaseClass.myEvent' is never used Program.cs 
         public virtual event EventHandler myEvent; 
        } 

        public class DeriveClass : BaseClass 
        { 
         public override event EventHandler myEvent; 

         public void MyFunction() 
         { 
          if (myEvent != null) 
          { 
           myEvent(this, null); 
          } 
         } 
        } 
       } 

誰でもこの警告の解決方法を教えていただけますか?

アトゥールSureka

+0

また、インターフェイスでイベントを宣言し、そのインターフェイスを実装することもできます。 – dash

+0

@ madd0ベースクラスには多くのクラスとイベントのセットがあります。私は、要件に基づいてクラスを導出する際に、それらのいくつかをオーバーライドしたいと思います。 –

+0

@AtulSureka私はあなたがそのための仮想イベントが必要だとは思わない。私は以下に示唆された答えについていくつもりです。 – madd0

答えて

0

私は基本クラスでそのイベントで何もしたくありません。以下は警告を解決しました。

public virtual event EventHandler myEvent = delegate { }; 
3

このような状況で使用するために、よりよく知られているパターンがDeriveClassmyEventを高めるために保護された方法を提供することにあります。例:

このパターンは警告を削除します。 myEventが決してBaseClassで使用されないため、警告が存在します。

0

イベントを仮想ではなく、派生クラスがそれを発生させるために使用できる保護されたメソッドを実装します。本当に仮想イベントを持つ理由はありません。

public event EventHandler MyEvent; 

protected void RaiseMyEvent() 
{ 
    var myEvent = MyEvent; 
    if (myEvent != null) 
     MyEvent(EventArgs.Empty); 
} 
+0

基本クラスには多くのクラスとイベントのセットがあります。要件に基づいてクラスを派生させるためにそれらのいくつかをオーバーライドしたい、私は仮想イベントがそれに最も適していると思う。 –

+0

これは、警告パブリック仮想イベントを解決する。EventHandler myEvent = delegate {}; –

+0

変数に代入を強制しているためにエラーが解決されていますが、実際にコード内にその代理代理人が実際にアクティブ化されることはありません。私はまだイベントを仮想化することが何を達成しているのか正確にはわかりません。イベントのタイプはまったく同じなので、行ったことは間接的に追加されます。コードからすべての仮想宣言とオーバーライドを削除すると、アプリケーションの動作に変化は見られません。 –

関連する問題