[VB.NET][C#] イベント構文

2020年7月31日

 私は母語が BASIC でして、だからなのか VB のほうをよく使っていて、ゆえに C# を書こうとすると戸惑うことがあり、event も書き方をよく忘れるのでメモ(汗

 以下はほぼ等価なイベントを使ったサンプルコード。結果だけ見れば、なんでこんな迂遠なことを、なんだけどもサンプルっとことで(汗

  • VB.NET
    Module Program
        Private WithEvents _obj As Class1
    
        Sub Main(args As String())
            _obj = New Class1
            _obj.Method01()
        End Sub
    
        Private Sub _obj_Event01(message As String, value As Integer) Handles _obj.Event01
            Console.WriteLine("{0} {1}", message, value)
        End Sub
    End Module
    
    Class Class1
        Public Event Event01(message As String, value As Integer)
    
        Public Sub Method01()
            RaiseEvent Event01("Hello1", 1)
        End Sub
    End Class
    
  • C#
    class Program
    {
        private static Class1 _obj;
    
        static void Main(string[] args)
        {
            _obj = new Class1();
            _obj.Event01 += _obj_Event01;
    
            _obj.Method01();
        }
    
        public static void _obj_Event01(string s, int i)
        {
            Console.WriteLine("{0} {1}", s, i);
        }
    }
    
    class Class1
    {
        public event Action<string, int> Event01;
    
        public void Method01()
        {
            this.Event01("Helo", 1);
        }
    }
    

 個人的には VB のほうの構文が好きでして、それは以下のような理由です。

  • WithEvents キーワードでイベントを起こすオブジェクトだというのが明示できる点
  • Handles キーワードでイベントで呼ばれるメソッドだということが明示される点
  • RaiseEvent でイベントを実行していることが明示される点
  • event 用の delegate を別に定義しなくてよい点
  • IDE の機能でイベントメソッドを自動作成してくれる

 C# のが好きでない理由はその逆ですね。

  • イベントを起こすオブジェクトとそうでないオブジェクトとの差がない
  • イベントで呼ばれるメソッドとそうでないメソッドが、メソッドを見ただけではわからない
    (もちろんイベントを登録しているところでは解るけど場所が離れているので・・・)
  • イベントの実行とメソッドの呼び出しの差がない
  • event 用の delegate を別に定義する必要がある。最近は Action を使えるけど、そうすると引数名が自由にならない。
  • IDE の機能でイベントは自動的に作成くれなさそう

 もっとも、まだ C# を使いこなせていないからそう思うだけなのかもしれません(汗






カテゴリー: C#, VB.NET

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org