[C#] Method Group Conversion

Method Group Conversionとはdelegateとeventの登録に関するC#の仕様の一つ。
handlerのevent登録部分の簡素化が可能になる。
以下のクラスが定義されているとする。
コード例は参考文献より

public class SimpleMath
{
// Not bothering to create a System.EventArgs
// derived type here.
public delegate void MathMessage(string msg);
public event MathMessage ComputationFinished;
public int Add(int x, int y)
{
ComputationFinished("Adding complete.");
return x + y;
}
public int Subtract(int x, int y)
{
ComputationFinished("Subtracting complete.");
return x - y;
}
}

プログラム中でdelegateを使ってevent handlerを登録するやり方は以下のようになる。ComputationFinishedイベントではMathMessageというdelegateタイプのインスタンスが指しているComputationFinishedHandlerを実行する、と言う意味。

class Program
{
static void Main(string[] args)
{
SimpleMath m = new SimpleMath();
m.ComputationFinished +=
new SimpleMath.MathMessage(ComputationFinishedHandler);  // この部分
Console.WriteLine("10 + 10 is {0}", m.Add(10, 10));
Console.ReadLine();
}
static void ComputationFinishedHandler(string msg)
{ Console.WriteLine(msg); }
}

同じ意味でComputationFinishedHandlerをeventに登録するだけなら以下で同じ効果がある。

m.ComputationFinished += ComputationFinishedHandler;

ハンドラー関数をdelegate型にcastすることもできる。この例では

(SimpleMath.MathMessage)ComputationFinishedHandler

でdelegate型にcastできる。

広告
%d人のブロガーが「いいね」をつけました。