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つ表示されます。
関連の記事