Tech

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

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

はじめに

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

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

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

デリゲートの定義

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

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

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

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

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

追加方法

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

実行結果

削除方法

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

実行結果

さいごに

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

おすすめ書籍

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

page_footer_responsive




-Tech
-

執筆者:


comment

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

CAPTCHA


関連記事

祝!iOS15でハーフモーダルが追加

1 はじめに2 早速使ってみる2.1 準備2.2 実装2.3 detents2.4 コードでの高さ切り替え2.5 モーダル内のスクロール許可2.6 グラバーの表示2.7 角丸2.8 親Viewとの併用 ...

iOS13ダークモード対応

1 はじめに2 一時しのぎ3 実装3.1 UI Element Colors3.2 Color Set3.3 コードで描きたい3.4 カスタムのカラーを定義する3.5 画像をモードで動的に変更したい4 ...

Xcode11のデバッグ機能

1 はじめに2 Device Conditions2.1 Thermal state condition2.2 Network link condition3 Environment Override ...

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

1 はじめに2 Terrainの追加方法3 Terrainの使い方4 Create Neighbor Terrain5 Paint Terrain5.1 Raise or Lower Terrain5 ...

【Unity】Raycastを利用して接地判定を行う

1 はじめに2 今回やりたいこと3 色々な接地判定4 Rayとは5 接地判定6 ジャンプのコードを記述7 さいごに8 おすすめ書籍 はじめに こんにちはsuzukiです。久しぶりにunityを触り色々 ...

フォロー

blog-page_side_responsive

2019年7月
 123456
78910111213
14151617181920
21222324252627
28293031  

アプリ情報

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