- 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
() ←は、メソッド(匿名メソッド)をコールしているから必要、という事ですよね? それが分かっていなかったようです。 ありがとうございました
|