看板 C_Sharp 關於我們 聯絡資訊
我想要將想執行的方法(method)在呼叫委派時 以指定的引數執行 (委派是在呼叫執行時給予引數,但我想在把方法加進委派時,就給予引數) 以下是我想出來的辦法的示意程式碼 但是我覺得不夠好(大量使用匿名方法的效率堪慮) 請問有沒有更好的解決方法? EX: class TestClass { List<Action> Del = new List<Action>(); TestClass() { for (int i=0;i<5;i++) { string a = i.ToString(); Del.Add(() => { Test(a); }); //把不同引數,塞入同個方法,放進委派中 } } void Test(string TestA) //要放進委派的方法 { Console.WriteLine(TestA); } void Actionthis() //執行所有委派 { for (int i = 0; i < Ss.Count;i++ ) { Del.ElementAt(i)(); } } } ========================================================= 匿名方法的缺點有兩個: 1.自委派中移除會有困難 (MSDN有寫移除方式,但太麻煩了,我會避開) 2.只要將該匿名方法放進委派中 包函匿名方法的大括弧{}內的資源 就不會被釋放 EX: int TestK() { int c = 0; int b = 1; 委派實體1 += ()=>{c++;} return b; } 只要那個匿名方法還存在於「委派實體1」中 大括弧的資源就會繼續存在 一開始自己用這個方法用的蠻高興的 但處理稍微多一點點的物件時就囧了..... 感覺起來有點慢..... 雖然可以執行也達到預期效果,但沒看過別人這樣用 想問一下比較常用、正規的解決方法是怎麼樣? -- 寫做F23,讀做純潔。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.27.109.99
F23ko:呃.... 或是.... 有沒有人能給個關鍵字? = = 04/14 21:23
jhchou:為什麼不把參數存在物件中,讓委派呼叫的時候可以取值就好? 04/14 22:19
F23ko:因為不想宣告這麼多欄位。我想設計成容易擴充、修改方便的 04/14 22:58
F23ko:Class。如果Class的方法少的話還好,但如果方法一多的話,那 04/14 22:59
F23ko:我可能要宣告十幾二十個欄位,並逐一檢查有沒有值要執行。 04/14 23:00
F23ko: ^而且都是List<> 04/14 23:01