トップページ > プログラム > 2015年02月18日 > zJtQK+E+

書き込み順位&時間帯一覧

4 位/244 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000431000000008



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
C#, C♯, C#相談室 Part86 [転載禁止]©2ch.net

書き込みレス一覧

C#, C♯, C#相談室 Part86 [転載禁止]©2ch.net
682 :デフォルトの名無しさん[sage]:2015/02/18(水) 13:26:39.80 ID:zJtQK+E+
デリゲートとかいうのに関して質問があります

delegate string StringHandler();

static void Main(string[] args)
{
string user01 = "";
string user02 = "";

List<StringHandler> userList = new List<StringHandler>();
userList.Add(delegate { return user01; });
userList.Add(delegate { return user02; });

user01 = "ABC";
user02 = "DEF";

foreach (StringHandler user in userList) {
Console.WriteLine(user());
}

続く
C#, C♯, C#相談室 Part86 [転載禁止]©2ch.net
683 :デフォルトの名無しさん[sage]:2015/02/18(水) 13:30:57.99 ID:zJtQK+E+
これでforeachで取り出されたList内には"ABC"と"DEF"が入ってるらしいのですが
原理が分かりません

デリゲートでぐぐると、「メソッドの実行を関節的に行う」
「C言語でいう関数ポインタである」という説明を見ました。

これってつまり

{ return user01; });

ここはuser01というフィールドの参照をリターンしているという事なんですか?

ちなみにUnityなんですが、Debug.Logで出力してもdelegate型名がログウィンドウに
表示されるだけで、中身が確認できませんでした
C#, C♯, C#相談室 Part86 [転載禁止]©2ch.net
685 :デフォルトの名無しさん[sage]:2015/02/18(水) 13:55:24.96 ID:zJtQK+E+
>>684
キャプチャ機能は一応、目を通しました
匿名メソッド内で上位スコープの変数が使われている場合、その変数の延命が行われる、とか

あと

string x;
x = userList[0];

とかできないのもよく分かりません
stringにキャストできませんとか言われます
userList[0]で匿名メソッド「{ return user01; }」が動いてuser01の中身(string)を返すのでは・・・?
C#, C♯, C#相談室 Part86 [転載禁止]©2ch.net
686 :デフォルトの名無しさん[sage]:2015/02/18(水) 13:57:06.77 ID:zJtQK+E+
すみません
>user01の中身(string)を返すのでは・・・?

返すのはstring型ではなく、「参照」ですよね?
その中身とかどうやって見れるんでしょうか
C#, C♯, C#相談室 Part86 [転載禁止]©2ch.net
688 :デフォルトの名無しさん[sage]:2015/02/18(水) 14:06:25.57 ID:zJtQK+E+
>>687
アホな質問ですみませんが、delegate使ってメソッド呼ぶのと
普通にメソッド呼ぶのではキャプチャ機能以外で何が違うんでしょうか
C#, C♯, C#相談室 Part86 [転載禁止]©2ch.net
689 :デフォルトの名無しさん[sage]:2015/02/18(水) 14:07:28.88 ID:zJtQK+E+
昨日から結構デリゲートについてunityで動かしたりしてるんですが
デリゲートというものについての理解が困難です・・・

参考にしているのは
ttp://ufcpp.net/study/csharp/sp_delegate.html
主にここです
C#, C♯, C#相談室 Part86 [転載禁止]©2ch.net
691 :デフォルトの名無しさん[sage]:2015/02/18(水) 14:40:41.80 ID:zJtQK+E+
>>690
そこもちょっとよく理解できていませんが、

>StringHandler handler = userList[0];
>string result = hander();

当初の目的としてはここが知りたかったんです

今まで
string result = userList[0];
としていましたが、delegate型が帰るので、一度その型で受けてから
hander();と書いてメソッド実行してreturn user01の型であるstringで受ける、
という認識でいいんですよね
C#, C♯, C#相談室 Part86 [転載禁止]©2ch.net
693 :デフォルトの名無しさん[sage]:2015/02/18(水) 15:07:30.27 ID:zJtQK+E+
>>692
() ←は、メソッド(匿名メソッド)をコールしているから必要、という事ですよね?
それが分かっていなかったようです。
ありがとうございました


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。