C# 2.0 からのシンタックスの変更
デリゲートの基本 では、デリゲートの基本的な利用例とその意味を説明しました。
記事では「f1 にデリゲート型のインスタンスを設定する」という点を強調するために、旧式の書き方を採用しました。
この記事では新しい書き方を紹介します。
C# 2.0 でのデリゲートの書き方
新しいシンタックスを紹介する前に、旧式の方法を紹介します。
using System;
namespace DelegateTest1
{
class Program
{
static void Main(string[] args)
{
Class1 c1 = new Class1(); c1.f1 = new Class1.f1Delegate(a); c1.Test();
}
static void a()
{
Console.WriteLine("I'm a().");
}
}
}
C# 1.0 では上のように new を用いて明示的にデリゲート型のインスタンスを作成しました。
C# 2.0 以降では次のように、メソッドを直接代入するように書くことが可能です。
using System;
namespace DelegateTest1
{
class Program
{
static void Main(string[] args)
{
Class1 c1 = new Class1(); c1.f1 = a; c1.Test();
}
static void a()
{
Console.WriteLine("I'm a().");
}
}
}
ちなみに、どちらの方法で書いても、裏側では C# 1.0 の場合と同様にデリゲート型のインスタンスを作成するコードが出力されるので、 どちらが効率が良いということでもありません。
新しいシンタックスで書いたコードをディスアセンブルすると、次のようにデリゲートをインスタンス化していることが確認できます。
したがってどちらで書いてもかまいませんが、当サイトでは "裏側の動き" を意識したいので、明示的にインスタンスかする方法で書くつもりです。