📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
細 文字列「source lang」を「syntaxhighlight lang」に置換 |
|||
| 20行目: | 20行目: | ||
デリゲート型を作成するには、以下のように<code>delegate</code>キーワードを使用する。<br> | デリゲート型を作成するには、以下のように<code>delegate</code>キーワードを使用する。<br> | ||
これにより、Delegate型(正確には、MulticastDelegate型)のサブクラスが定義される。<br> | これにより、Delegate型(正確には、MulticastDelegate型)のサブクラスが定義される。<br> | ||
< | <syntaxhighlight lang="csharp"> | ||
// int型を引数にとり、int型を返すメソッドを参照するデリゲート型 | // int型を引数にとり、int型を返すメソッドを参照するデリゲート型 | ||
public delegate int IntToInt(int value); | public delegate int IntToInt(int value); | ||
| 38行目: | 38行目: | ||
<br> | <br> | ||
次に、クラスメソッドを参照するデリゲートのインスタンスを作成する。<br> | 次に、クラスメソッドを参照するデリゲートのインスタンスを作成する。<br> | ||
< | <syntaxhighlight lang="csharp"> | ||
// インスタンスを作成するデリゲート型 | // インスタンスを作成するデリゲート型 | ||
// int型を引数にとり、int型を返すメソッドを参照するデリゲート型 | // int型を引数にとり、int型を返すメソッドを参照するデリゲート型 | ||
| 44行目: | 44行目: | ||
</source> | </source> | ||
<br> | <br> | ||
< | <syntaxhighlight lang="csharp"> | ||
// 参照するクラスとメソッド | // 参照するクラスとメソッド | ||
public class Calculator | public class Calculator | ||
| 55行目: | 55行目: | ||
</source> | </source> | ||
<br> | <br> | ||
< | <syntaxhighlight lang="csharp"> | ||
// デリゲートのインスタンスを作成 | // デリゲートのインスタンスを作成 | ||
// AddOneメソッドを参照するIntToInt型 | // AddOneメソッドを参照するIntToInt型 | ||
| 69行目: | 69行目: | ||
デリゲートは、対象のインスタンスへの参照も内部的に保持しており、<br> | デリゲートは、対象のインスタンスへの参照も内部的に保持しており、<br> | ||
そのインスタンスにアクセスするためのプロパティとして、<code>Delegate</code>型は<code>Target</code>プロパティを持っている。<br> | そのインスタンスにアクセスするためのプロパティとして、<code>Delegate</code>型は<code>Target</code>プロパティを持っている。<br> | ||
< | <syntaxhighlight lang="csharp"> | ||
// インスタンスを作成するデリゲート型 | // インスタンスを作成するデリゲート型 | ||
// int型を引数にとり、int型を返すメソッドを参照するデリゲート型 | // int型を引数にとり、int型を返すメソッドを参照するデリゲート型 | ||
| 75行目: | 75行目: | ||
</source> | </source> | ||
<br> | <br> | ||
< | <syntaxhighlight lang="csharp"> | ||
public class Multiplier | public class Multiplier | ||
{ | { | ||
| 93行目: | 93行目: | ||
<br> | <br> | ||
MultiplierクラスのインスタンスのCalcメソッドを参照するデリゲートのインスタンスを作成するには、以下のように記述する。<br> | MultiplierクラスのインスタンスのCalcメソッドを参照するデリゲートのインスタンスを作成するには、以下のように記述する。<br> | ||
< | <syntaxhighlight lang="csharp"> | ||
Multiplier doubler = new Multiplier(2); // Calcメソッドは、引数で渡した数の2倍の数を返す | Multiplier doubler = new Multiplier(2); // Calcメソッドは、引数で渡した数の2倍の数を返す | ||
IntToInt doublerIntToInt = doubler.Calc; // doublerのCalcを参照するデリゲートを生成 | IntToInt doublerIntToInt = doubler.Calc; // doublerのCalcを参照するデリゲートを生成 | ||
| 108行目: | 108行目: | ||
<br> | <br> | ||
以下の例では、Func<T, TResult>型のデリゲートのインスタンスを生成している。<br> | 以下の例では、Func<T, TResult>型のデリゲートのインスタンスを生成している。<br> | ||
< | <syntaxhighlight lang="csharp"> | ||
public static int AddOne(int value) | public static int AddOne(int value) | ||
{ | { | ||
| 165行目: | 165行目: | ||
7行目の<code>predicate(element)</code>では、T型のelementを引数に、Func<T, bool>型のデリゲートであるpredicateが参照しているメソッドを呼び出している。<br> | 7行目の<code>predicate(element)</code>では、T型のelementを引数に、Func<T, bool>型のデリゲートであるpredicateが参照しているメソッドを呼び出している。<br> | ||
(<code>predicate(element)</code>は、<code>predicate.Invoke(element)</code>とも記述できる)<br> | (<code>predicate(element)</code>は、<code>predicate.Invoke(element)</code>とも記述できる)<br> | ||
< | <syntaxhighlight lang="csharp"> | ||
public static int CountList<T>(List<T> list, Func<T, bool> predicate) | public static int CountList<T>(List<T> list, Func<T, bool> predicate) | ||
{ | { | ||
| 186行目: | 186行目: | ||
匿名関数を使用しない場合、デリゲートを作成するためだけに使用するメソッドの定義は、<br> | 匿名関数を使用しない場合、デリゲートを作成するためだけに使用するメソッドの定義は、<br> | ||
デリゲートのインスタンスを生成する場所と離れた位置に記述する必要があるため、可読性が悪い。<br> | デリゲートのインスタンスを生成する場所と離れた位置に記述する必要があるため、可読性が悪い。<br> | ||
< | <syntaxhighlight lang="csharp"> | ||
public static bool IsLengthLessThan5(string str) | public static bool IsLengthLessThan5(string str) | ||
{ | { | ||
| 210行目: | 210行目: | ||
匿名関数とは、デリゲートのインスタンスを生成すると同時に、インラインでメソッドを定義するためのものである。<br> | 匿名関数とは、デリゲートのインスタンスを生成すると同時に、インラインでメソッドを定義するためのものである。<br> | ||
以下の例では、上記のIsLengthLessThan5メソッドを匿名関数に変更している。<br> | 以下の例では、上記のIsLengthLessThan5メソッドを匿名関数に変更している。<br> | ||
< | <syntaxhighlight lang="csharp"> | ||
public static void Main (String[] args) | public static void Main (String[] args) | ||
{ | { | ||