Tech

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

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

はじめに

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

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

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

デリゲートの定義

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

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

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

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

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

追加方法

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

実行結果

削除方法

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

実行結果

さいごに

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

おすすめ書籍

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

blog-page_footer_336




blog-page_footer_336




-Tech
-

執筆者:


comment

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

CAPTCHA


関連記事

【Unity】AnimationControllerの基本的な使い方

1 はじめに2 事前準備2.1 キャラクター2.2 アニメーション3 Sceneに追加と設定4 AnimationController5 使い方5.1 State5.2 Transition5.3 P ...

ReactNative環境構築[Android/iOS]

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

ReactNative開発のスタート、シミュレータでのデバッグ

1 はじめに2 改めてシミュレータの起動3 表示内容を変更してみる3.1 App.js3.2 表示テキストの変更3.3 シミュレータの更新「command + R」4 デバッグメニュー4.1 Real ...

UserNotificationsの使い方について

1 はじめに2 UserNotificationsフレームワーク3 基本実装3.1 デリゲートの設定3.2 ユーザー許可3.3 デバイストークン取得後3.4 バックグラウンドで通知受信3.5 フォアグ ...

Go言語

GoフレームワークGinでミドルウェアを使ってログインAPIを実装

1 はじめに2 ログインAPIの作成3 ログインのセッション管理4 ミドルウェア4.1 gin.Default()4.2 Logger4.3 Recovery4.4 sessions5 独自ミドルウェ ...

フォロー

blog-page_side_responsive

2019年7月
 123456
78910111213
14151617181920
21222324252627
28293031  

アプリ情報

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