C#のイベントのサンプルです。
目次
| サンプル | イベントとは | 
| イベントのサンプル | |
| イベントに匿名メソッドを登録する | 
イベントとは
| event デリゲートの型 イベントの名称 | 
- イベントに、メソッドの登録と削除ができます。
 →登録するメソッドは、delegateの引数と戻り値の型に一致している必要があります。
- イベントにメソッドを=で代入できません。
- イベントにメソッドを+=で代入した場合は、メソッドの追加になります。
 →メソッドを2つ追加した場合、メソッドが連続して実行されます。
- イベントにメソッドを-=で代入した場合は、メソッドの削除になります。
 →匿名メソッドではなくメソッドを指定するようにします。
- eventキーワードを使用します。
- 以下は、Microsoftのイベントのリンクです。
 https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/events/
イベントのサンプル
イベントのサンプルです。
using System;
delegate void delegate1();
class Class1
{
	public event delegate1 PrintMoji;
	public void Print1()
	{
		PrintMoji();
	}
}
class Test1
{
	public static void Main()
	{
		Class1 c1 = new Class1();
		c1.PrintMoji += new delegate1(Hello1);
		c1.Print1(); // hello
		c1.PrintMoji -= new delegate1(Hello1);
		c1.PrintMoji += new delegate1(Hello2);
		c1.Print1(); // こんにちは
	}
	public static void Hello1()
	{
		Console.WriteLine("hello");
	}
	public static void Hello2()
	{
		Console.WriteLine("こんにちは");
	}
}
3行目は、デリゲートを定義しています。引数なしで戻り値なしです。
7行目は、イベントを定義しています。
18行目は、イベントにメソッドを追加しています。
20,21行目は、メソッドを削除して追加しています。
イベントに匿名メソッドを登録する
using System;
delegate void delegate1();
class Class1
{
	public event delegate1 PrintMoji;
	public void Print1()
	{
		PrintMoji();
	}
}
class Test1
{
	public static void Main()
	{
		Class1 c1 = new Class1();
		c1.PrintMoji += delegate() { Console.WriteLine("hello");};
		c1.PrintMoji += delegate() { Console.WriteLine("こんにちは");};
		c1.Print1(); // hello こんにちは
	}
}18,19行目は、匿名メソッドです。
連続して追加しているので20行目は、文字列が2つ表示されます。
関連の記事
