デリゲートは基本的にメソッドへの参照です。
たとえば、文字列を変更するためにさまざまな方法が必要になる場合があります。
public static string ChangeOne(string s) {
return s.TrimStart();
}
public static string ChangeTwo(string s) {
return s.TrimEnd();
}
いくつかの基準に応じて、それらの中から選択し、その選択をデリゲートに入れることができます。
Func<string, string> change;
if (DateTime.Today.DayOfWeek == DayOfWeek.Sunday) {
change = ChangeOne;
} else {
change = ChangeTwo;
}
次に、デリゲートを通常のメソッドとして使用できます。それを使用するコードは、メソッドが何をするか、またはその理由を知る必要はありません。
string x = " asdf ";
x = change(x);
デリゲートは、たとえば、ライブラリ メソッドがコレクション内のオブジェクトについて何も知る必要がない一般的なコレクションに広く使用されます。関連情報を選択するメソッドへのデリゲートを提供するだけです。
ここでは、Where
メソッドはリスト内のオブジェクトについて何も認識せず、オブジェクトを結果に含めるかどうかを決定するメソッドへのデリゲートのみを取得します。
IEnumerable<obj> older = listOfObj.Where(o => o.Age >= 18);