Unity/C#】delegateが全然理解できません。詳しくはこちらトピックに返信するユーザー名:メールアドレス:件名:C言語のソースファイルの拡張子を答えよ(半角):答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。C#におけるデリゲート(delegate-委任・委託・委譲という意味)とはその名前の通り、処理の委譲を支援するための仕組みとなります。委譲とは大辞林によると「権限などを他に任せて譲ること」となっています。委譲する場合にはきちんと「委譲することができる人」の「条件の定義」が必要となる訳です。C#においても同じように考えることができて、デリゲートという仕組みでは、まずは処理を委譲することができる関数(メソッド)の条件を定義する必要があります。そこで、C#のデリゲートでは、まずメソッドの参照を行うために利用する条件[color=#FFBF00]メソッド[/color]の[color=#FF8080]引数[/color]や[color=#FF8080]戻り値[/color]を定義することで設定します。定義されたデリゲートはC#では「型」(厳密には参照型)として機能します。それでは定義方法です。定義は「delegate」という予約語を用いて「[color=#FFBF00]メソッド[/color]」の「[color=#FF8080]引数[/color]」や「[color=#FF8080]戻り値[/color]」などを指定します。前述のとおり、デリゲートは型として定義することになるので、定義したデリゲートを用いることで、メソッドを格納するための「変数宣言」を行うことができる訳ですね。以下のサンプルでは「MyDelegate」という名前のデリゲートを定義しています。ここではintの戻り値を持ち、int型の引数を持つデリゲートはこんな感じで定義します。次に宣言したdelegateを用いて変数宣言を行って、それを利用する訳です。デリゲートで変数宣言した変数には「メソッドそのもの」を代入することが可能です。代入した変数を用いてメソッドを呼び出すことが可能になります。デリゲート名)を省略できるようになりました。method)が追加されていました。インラインメソッドとはdelegate構文を用いて「メソッド名を持たない処理」を記述する方法が提供されました。delegateを用いて非常に簡単は処理を記述することに利用されていましたが、今では後述するラムダ式があるため、利用する機会は減りました。3.5では以下の3種類のデリゲートが定義されました。いうような感じで定義されています。arg)のみ定義されていましたが、その後3.0で、上記のように引数の数が4つあるジェネリックデリゲートまで定義されました。4.5ではActionやFuncに指定される引数の数が最大16まであるデリゲートが定義されています。そのため2.0までに行っていたように新しく「delegateキーワードを使ったデリゲート宣言」を行わなくてよくなり、多くのケースで定義済みのデリゲートを利用することで事足りるようになりました。ラムダ式は簡単に言ってしまうと「デリゲート型」および「式ツリー(ExpressionTree)」を作成するために使用できる匿名関数です。LINQで用いることができるよう追加された仕様ですが、もちろんそれ以外の用途でも利用できます。用いて左辺にパラメータ、右辺に式やステートメントブロックを置くことで作成できます。メソッドと同様return文で戻り値を指定する。上記のようにラムダ式には式形式のものとステートメント形式のものがあります。匿名関数といっても、前述した匿名関数とは見た目以外にもいくつかの違いがあります。•ラムダ式の戻り値はデリゲート以外にも式ツリー(Expressionクラスを用いたツリー)も作成が可能。ラムダ式内でメソッド呼出などを行うと式ツリーの作成ができない。•匿名関数は、インラインで記述できるがメソッドなので、ステートメントブロックの中から定義されているメソッド内の変数にはアクセスできませんが、ラムダ式では「変数のキャプチャ」という機能により下記のサンプルのように上位スコープの変数のアクセスが行える。上記のサンプルのように変数をキャプチャした状態で外部メソッドをデリゲートを引き継ぐと、通常メソッド終了時に変数の解放がされるところ、生存期間が長くなることがありますので注意が必要です。このようにかなり簡潔に記述できるようになりました。【Unity/C#】delegateが全然理解できません。【Unity/C#】delegateが全然理解できません。function)という機能があります。導入されたラムダ式という書き方があります。(匿名メソッド式とラムダ式を合わせて「匿名関数」という総称が与えられた。ラムダ式のことを含めて匿名メソッドと呼ぶこともあります。function)[/color]という機能があります。導入されたラムダ式という書き方があります。([color=#FFBFBF]匿名メソッド式とラムダ式を合わせて「匿名関数」という総称[/color]が与えられた。ラムダ式のことを含めて匿名メソッドと呼ぶこともあります。【Unity/C#】delegateが全然理解できません。^csproj.txt.\bin\Release\App1.exepauseが抜けていました。このコードはツールによって生成されました。コードが再生成されるときに損失したりします。このコードはツールによって生成されました。コードが再生成されるときに損失したりします。^csproj.txt.\bin\Release\App1.exepause[/code]が抜けていました。このコードはツールによって生成されました。コードが再生成されるときに損失したりします。このコードはツールによって生成されました。コードが再生成されるときに損失したりします。【Unity/C#】delegateが全然理解できません。ビルドを開始しました。(既定のターゲット)。