AK2Sのプログラム日記

フリーランスプログラマのプログラムに関する日記です

delegate(デリゲート)のコールチェック

どうも~こんばんは、AK2Sですヽ(゚∀。)ノ

皆様いかがお過ごしでしょうか?

最近は10月なのに寒暖差が激しいので体調を崩さないようにご注意ください!

 

さてさて、今日はdetegateについてお話しようかと思います。

 

delegateとは? delegate (C# リファレンス)


delegate は、指定されたメソッドまたは匿名メソッドをカプセル化するために使用される参照型です。

delegateとは「委譲」という意味で簡単に言うと同じ型の同じ引数のメソッドを代わりに実行しますよーというものです。

 

うちもこの業界に入ってから「delegate」という単語を聞いた時

( ゚д゚)ポカーン

となりましたが、幸いC++をやっていたため「関数ポインタ」で納得できました。

 (こんな人でもゲームプログラマーになれます…っ!

 

ここはでC#にある定義済みdelegateでサンプルを書いてみましょう。

 どうでしょうか?コンソールログにHogeが出力されると思います。

 

このような感じにメソッドを登録して、代わりにコールする…

イベントハンドラー的な扱いが出来るのがdelegateです。

 

delegateは自分でも定義出来るので、様々な型が対処出来ます!

自分定義のdelegateを登録するには

デリゲート - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

こちらのリンクを参照してみてください!

 

さてさて、ここでdetegateの使い方がわかったところでこのdelegateを匿名関数で使用してみたいと思います。

 

匿名関数とは? 匿名関数 (C# プログラミング ガイド)


匿名関数は、デリゲート型になるところであればどこでも使用できる "インライン" ステートメントまたは式です。 これを使用すると、名前付きデリゲートの初期化や、名前付きデリゲート型の代わりにメソッド パラメーターとして渡すことができます。

 

つまりこういうことです↓

 this.Hogeの次に何やら変な記号 () があると思いますが、これはラムダ式と言うものです!

このラムダ式を使うとメソッドの定義が省けるって訳なのです…!便利ですね!

そしてこのラムダ式を使用してる部分匿名関数です!(認識合ってるかな…?(;´Д`)

 

さて、ここまでは前説でここからが本題です!

 

delegate使用時のコールチェック


皆さんはこのようなコードを書いたことありませんか?

こんな感じにpublicでメソッドをコールして、処理してdelegateで処理が終了したことを通知して…そして通知する時にdelegateのNULLチェック!

 

自分は結構こういうNULLチェックが面倒と思う方なので、何か共通点を見つけてUtility的なものを作成するんですよね(´・ω・`)

 

そして今回GitHubC#定義済みdelegateに対応したdelegateのクラスを追加しました!

AKLib/DelegateExtensions.cs at master · AK2S/AKLib · GitHub

AKLib/Dlg.cs at master · AK2S/AKLib · GitHub

使用方法はこちら↓

 

このようなサンプルの感じに使用すればいちいちNULLチェックしないでdelegateがコール出来ます!

そして両方のdelegateサポートクラスには返り値でboolが返ってきますので、正常にメソッドがコールしたか否かの判別も出来ます!

 

さて、今日はここまで!

それでは良いプログラミングライフを!(*´艸`*)