作者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
1F:→ F23ko:呃.... 或是.... 有没有人能给个关键字? = = 04/14 21:23
2F:→ jhchou:为什麽不把参数存在物件中,让委派呼叫的时候可以取值就好? 04/14 22:19
3F:→ F23ko:因为不想宣告这麽多栏位。我想设计成容易扩充、修改方便的 04/14 22:58
4F:→ F23ko:Class。如果Class的方法少的话还好,但如果方法一多的话,那 04/14 22:59
5F:→ F23ko:我可能要宣告十几二十个栏位,并逐一检查有没有值要执行。 04/14 23:00
6F:→ F23ko: ^而且都是List<> 04/14 23:01