久しぶりの更新です(´・ω・)

今後ゆったりやっていきます。

 

当方C#を久しぶりに使用していて

C#のデリゲートについてなかなかわかりづらかったので記事にしてみようと思いました。

 

 

誤記などありましたらコメント欄にてご指摘をお願いいたします。

 

デリゲートとは

・デリゲート deligate (日本語だと委譲、委任、代表など)

メソッドを表すための型

デリゲートを利用することによって変数にメソッドを代入することもできるし、メソッドの引数にも渡せる

 

どこら辺が便利なのかは説明するには、一言で説明するのは難しいのでとりあえずやってみます。

説明:

デリゲートはクラスの上に記述します。

syntax

[修飾子] delegate 戻り値型 デリゲート名(引数1,,,,,,,)

この”myDelegate”はstring型の引数を受け取り、戻り値はvoid(なし)であるメソッドを代入できることになります。

つまりプログラム中string型の引数を受け取り、戻り値はvoid(なし)であるメソッドは、Outconメソッドとなります。

Mainメソッドから、newでtestデリゲートをインスタンス後、Outconメソッドに渡しています。

これによって、testデリゲートは、Outconメソッドとして動作することになります。

出力結果はもちろん、「Taro is running...」となります。

 

これ実際、メソッドを変数経由で実行するだけでは意味がないと思いませんか?

単純にわかりづらくなっただけ感がすごいですよね、、

次はデリゲートをメソッドの引数としてメソッドに引き渡してみます。

 

 

 

まずはデリゲートなしの以下のようなプログラムがあるとします。

出力結果

説明:

data配列を作成し、nuというインスタンス作成後、

ArrayOutputを呼び出しすみかっこ付きで配列の要素をすべて出力する

というものです。

ここで、すみかっこではなく普通のかっこでくくりたかったら?、あるいは文字列の最初の何文字だけ出力したかったら?

機能が似たようなメソッドが増えていくつも書くのはとても非効率、可読性の問題となります。(これがデリゲートを使う理由かと)

デリゲートを利用することで後から引き抜けるようになります。

具体的には、ArrayOutputメソッドを配列要素を処理するコードだけを抜き出し、あとはメソッドに引き渡すという感じです。

デリゲート実装コードは下記です。

 

説明:

Mainメソッドから、

①data配列が出来ます。

②deというProgramクラスのインスタンスが作成されます。

mydelegateというmyDelegate型の変数が作成されます。myDelegate型なのでstring型の引数を受け取り、戻り値はvoid(なし)であるメソッド(3行目に定義の通り)のOutconメソッドを代入しています。

④deはArrayOutputメソッドを呼び出します。

  ArrayOutputメソッドの12行目でmyがmydelegateと同義です。つまりmyはOutconメソッドとなるのでOutconメソッドへ処理が移ります。

 

出力結果

 

といった感じです。

メソッドを代入するという行為は便利ですがわかりづらいので現時点は使いたくないですね。。

 

---

お疲れ様でした。

あとで皆様のブログを拝見しちゃおーー

それでは良い一日を!👌

 

 

*HAVE A GOOD DAY*
    ___
   /   ▲
/ ̄  ヽ ■■
●     ■■
ヽ___  ■■
    )=|
   / ||
 ∩∩__とノ
 しし───┘