2016年6月3日金曜日

[C#] delegate(デリゲート)

こんにちは。明月です。
今日はdelegate(デリゲート)について勉強しましょう。


前に筆者がOOP(オブジェクト指向プログラム)について説明したことがあります。OOPの特徴はカプセル、継承、抽象、ポリモーフィズムによってクラス単位でデータを扱う方法です。
そのことによってプログラムを設計する時に何のデータを受け取ってどんな処理するし、どんな結果あるいはデータを出力する流れを作成するのができます。


OOPの概念はオブジェクトの流れとしては定義していますが処理する方法には定義してないです。それで一から最後まで流れを決めてプログラミングするのでプログラムの性能が制限的になるし並列処理の実装が難しくなります。


そのため、最近のプログラム言語のパラダイムは関数型のプログラムになりました。関数型のプログラムの理論は昔からありましたが、実装が難しい短所でよく使えませんでしだが、最近は関数型言語も誕生したし、方法でも前より発展してC#にも「.Net Framework3.0」が文法から並立処理、匿名メソッド、Lamdaが追加されました。
それで今日はC#の関数型のプログラムの初めの「delegate」について勉強します。「delegate」のキーワードは初期C#モデルからも使えますが、匿名メソッド、Lamda式は「.Net Framework 3.0」から使用できます。


delegate


「delegate」は意味とおりに代理子です。すなわち、メソッドの抽象だと思えば理解しやすいと思いますが、メソッドを「delegate」を利用して一つのタイプに変換して呼び出す方法です。





上の例を見ると「delegate」を通ってメソッドを呼び出します。「TestMethod」「TestMethod1」「TestMethod2」は別のメソッドですが、呼び出すのはリストに結んで一括で呼び出せます。


delegateフィールド


「delegate」はメソッドを代理に呼び出すの意味は理解しました。デリゲートはメソッドを抽象(?)してメソッドを纏めって使う方法なのでいつもリストと一緒に使うはずです。
「delegate」フィールドはそのデリゲートリスト代わりに「デリゲート」をリストらしく格納できられるものです。




匿名メソッド


今までメソッドはメソッドの型を実装した後呼び出して使うことで勉強しました。でもメソッドをデリゲートで使うことならメソッド名が必要ではない場合もあると思います。そのみたいにメソッド型が有りず、実装だけあるメソッドを匿名メソッドということがあります。




今まで「delegate」について勉強しました。「delegate」は次の投稿から勉強する並列処理(parallel)、ランダ(lamda)、イベント(event)と関係があるので確実に勉強していきましょう。

0 件のコメント