作者F23ko (純潔)
看板C_Sharp
標題[問題] 讓委派在執行時以指定變數執行?
時間Wed Apr 14 00:02:00 2010
我想要將想執行的方法(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