[VC2010] デリゲートの簡易化

◆概要

これまで、デリゲートインスタンス生成式では new 演算子を用いて目的のデリゲート型を指定しなければなりませんでした。 従来の C# を用いたデリゲートインスタンス生成式は次のようなものです。

new デリゲート型 ( メソッド名 );

しかし、生成式の結果を格納する代入先の型が分かれば、対象のメソッドのみで作成しようとしているデリゲートインスタンスの型とメソッドの型が一致しているかどうかを正しく判断することができます。 そのため C# 2.0 では new 演算子を用いてデリゲートインスタンスを作成する作成するのは冗長であると考え、メソッド名を指定するだけでデリゲートインスタンスを作成することができます。

CallbackMethod callback = new CallbackMethod( Method );
CallbackMethod callback = Method;

上記では CallbackMethod 型のデリゲートインスタンスを作成するデリゲートインスタンス生成式です。 上の式は従来の C# の記述方法であるのに対して、下の式は C# 2.0 から可能となった簡略化された記述方法です。 この書き方でも、コンパイラによって自動的に解釈されて上の書き方と同じ意味となります。

        delegate void CallbackMethod();

        private void button1_Click(object sender, EventArgs e)
        {
            //従来のデリゲートインスタンス生成式
            CallbackMethod callback = new CallbackMethod(Method1);
            callback();       
        }

        private void button2_Click(object sender, EventArgs e)
        {
            // C# 2.0のデリゲートインスタンス生成式
            CallbackMethod callback = new CallbackMethod(Method2);
            callback = Method2;
            callback();
        }

        static void Method1()
        {
            MessageBox.Show("Hellow");
        }

        static void Method2()
        {
            MessageBox.Show("こんにちは!!");
        }

このプログラムで Method1 メソッドを呼び出すためのデリゲートインスタンスは従来の方法で作成されていますが、その後の Method2 メソッドを呼び出すためのデリゲートインスタンス生成式は新しい書き方で作成されています。 より直観的で、生産性のある書き方です。