Tech

C# マルチキャストデリゲートの備忘録

投稿日:2019年7月22日 更新日:

はじめに

こんにちはsuzukiです。本日はC#のマルチキャストデリゲートについてふれていこうと思います。
unityでC#のコードを触っていた際に出会ったのですが、何をしているのかわからなかったため、こちらに備忘として書いておきます。使い方は選ぶかもしれませんがきちんと設計できれば便利なのかもしれません。

C#のデリゲートについて

C#のデリゲートについて、基本的な考え方はSwiftと同じです。処理の移譲を行うという理解で問題なさそうです。
よくわからないというかたはメソッドを変数として同じように扱う仕組みとでも理解していただければと思います。

デリゲートの定義

それではデリゲートの定義の仕方です。
修飾子 delegate 戻り値の型 デリゲート名 引数

デリゲートの定義と同じ戻り値と引数であればデリゲートにメソッドを代入することができます。
今回の場合だと引数にintを一つ戻り値は何も返さない。という条件に合致する必要があります。
代入とデリゲートからメソッドを呼び出すには下記のように記述します。

引数と戻り値が同じであればクラスメソッドもインスタンスメソッドも代入可能です。

マルチキャストデリゲートについて

さて本題のマルチキャストデリゲートについてです。先ほどメソッドの代入は一回だけ行っておりましたが、デリゲートにメソッドの代入を複数行うことができます。メソッドが複数代入されているデリゲートをマルチキャストデリゲートと呼びます。

追加方法

デリゲートに複数のメソッドを代入する場合は+=を使って代入を行います。
またデリゲートの呼び出しは代入された順に行われ、並列実行は行われません。
先ほどのコードをもとに複数のメソッドを代入しました。

実行結果

削除方法

デリゲートに複数のメソッドを代入する場合は-=を使って削除を行います。
その際に代入しているメソッドを指定する必要があります。
二つ同じメソッドが代入されている場合は後ろから削除されていきます。

実行結果

さいごに

一応補足としてマルチキャストデリゲートの戻り値は最後に設定されたメソッドの戻り値が受け取れるみたいです。
なので基本的には戻り値を使うようなデリゲートでマルチキャストデリゲートを使うことはなさそうです。
慣れれば便利に使えるかもしれないので、引き続き学習して行きます。

おすすめ書籍

Unityの教科書 Unity2019完全対応版  2D&3Dスマートフォンゲーム入門講座作って学べる Unity 超入門スラスラ読める Unity C#ふりがなプログラミング

page_footer_300rect




page_footer_300rect




-Tech
-

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

React+axiosでhttpリクエスト

1 はじめに2 axiosとは2.1 XMLHttpRequest2.2 Promise3 準備4 実装4.1 resultsの中身4.2 エラーハンドリング4.3 カスタムヘッダーの付与5 Reac ...

ReactNative入門

1 はじめに2 そもそもReact Nativeとは3 JSXとは3.1 JSXに値を埋め込む3.2 属性の値を設定する3.3 関数でJSXを作る4 コンポーネントとは4.1 再利用性4.2 新規コン ...

ReactNative環境構築[Android/iOS]

1 はじめに2 準備2.1 HomeBrewをインストール2.2 node.jsのインストール2.3 Watchmanのインストール2.4 React Native CLIのインストール2.5 サンプ ...

[Unity]Terrain(地形)を使ってみた その2

1 はじめに2 Paint Trees3 Paint Details4 おまけ5 さいごに6 おすすめ書籍 はじめに こんにちはsuzukiです。前回に引き続きTerrainの機能を紹介していきます。 ...

MLKitで使えるTensorflow Liteについて調べてみた

1 はじめに2 そもそもTensorflowとは3 そしてTensorflow Liteとは4 Tensorflowの環境構築4.1 pyenv, pyenv-virtualenvをインストール4.2 ...

フォロー

follow us in feedly

page_side_300rect

2019年7月
« 6月 8月 »
 123456
78910111213
14151617181920
21222324252627
28293031 

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。