请教匿名委托
如题 ,最好能说说有什么好处 --------------------编程问答-------------------- 1.最直接的,代码简洁些2.C#3.0的语法LINQ依赖于此。
http://www.cnblogs.com/solo/archive/2008/04/24/1168981.html
我个人的很浅的理解 --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 学习zhong! --------------------编程问答-------------------- 与有名函数相比,当函数只使用一次时,匿名函数有几个优点:
程序的名称空间不会受到那些只使用一次的函数的污染。
函数的代码就位于使用它的地方,这样程序员就不用到处寻找这些只会使用一次的小函数代码了。
这种函数显然是与它所传递到的函数相关的,因此它显然与使用这个上下文的其他程序员也是有关的。如果这些只使用一次的函数都是与调用函数单独编写的,而后来调用函数被删除了,那么显然这些只使用一次的函数也就需要删除了。
参考:
http://www.ibm.com/developerworks/cn/linux/l-highfunc.html --------------------编程问答-------------------- 匿名方法还可以使用方法外的局部变量 --------------------编程问答-------------------- 可以生成闭包,比如:
class Program
{
public static void Main()
{
Action a = Test(1);
a();
a();
a();
}
public static Action Test(int a)
{
return delegate()
{
Console.WriteLine(++a);
};
}
}
参数a被封到了委托里,但是在推出Test函数后生命周期并没有完。闭包在有的时候是非常有用的。比如你一个窗体里面多个用户控件是动态加载的,用户控件里的函数又不都一样,就可以通过传参来生成闭包调用。
还可以就是做curry化
Func<int, int, int> func = i => i + 1;
Func<int, int> curry = func.Curry(1);
curry(2);
public static Func<P2, R> Curry<P1, P2, R>(this Func<P1, P2, R> func, P1 arg0)
{
return func.Curry()(arg0);
}
--------------------编程问答-------------------- 匿名方法可以将代码块传递为委托参数...减少实例化委托所需的系统开销...
虽然Lambda表达式也是匿名函数...但和匿名方法并不是一回事儿...要分清楚...
例如...可以将匿名方法转换为带有各种签名的委托..对于Lambda表达式来说却是不可能的... --------------------编程问答-------------------- 可以将匿名方法转换为带有各种签名的委托..对于Lambda表达式来说却是不可能的...
==========================================================================================
为什么Lambda不行,别忽悠人好吗
public delegate int TestD(int a);
class Program8
{
public static void Main()
{
Testdelegate(Test, 1);
Testdelegate(i => i + 1, 1);
}
public static int Test(int a)
{
return a;
}
public static void Testdelegate(TestD d, int a)
{
Console.WriteLine(d(a));
}
} --------------------编程问答-------------------- 8楼...先去学学什么叫Lambda表达式... --------------------编程问答-------------------- 8楼...先去学学什么叫Lambda表达式...
==============================================
请你举个例子 --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 8楼...先去学学什么叫Lambda表达式...
==============================================
我Lambda表达式学的不好,像您请教Lambda比匿名委托差在哪了。 --------------------编程问答-------------------- Lambda跟匿名委托没有可比性...都说了不是一个东西...虽然概念非常类似...
另外匿名委托、匿名方法、匿名函数都是不同的概念...多看看MSDN... --------------------编程问答-------------------- Lambda跟匿名委托没有可比性...都说了不是一个东西...虽然概念非常类似...
另外匿名委托、匿名方法、匿名函数都是不同的概念...多看看MSDN...
==============================================================================
请举例子,你这解释没有说服力。我就问这句“可以将匿名方法转换为带有各种签名的委托..对于Lambda表达式来说却是不可能的”
--------------------编程问答-------------------- 不是每个人都像你那么闲...上班时间抽空上来看看而已...下班才有空...
你可以自己先去看MSDN...很容易明白的... --------------------编程问答-------------------- 你没有任何例子就说我 “.先去学学什么叫Lambda表达式..”
不明白你为什么那么狂 --------------------编程问答-------------------- 你那个例子跟“Lambda表达式不可能将匿名方法转换为带有各种签名的委托”没有任何关系...自己先搞清楚...不需要我来举例... --------------------编程问答-------------------- 你那个例子跟“Lambda表达式不可能将匿名方法转换为带有各种签名的委托”没有任何关系...自己先搞清楚...不需要我来举例.
==================================================================================================
那就请你举一个正确的例子 --------------------编程问答-------------------- to fuadam:
看来你还真闲...本来我打算下了班抽时间认真回个帖...你越这样我越懒得回答...
如果我错了...放心...CSDN高手如云...早就有一帮人跳出来BS我了...
论坛里回答问题是自愿的...大家都很忙...没有谁必须承担义务...自己看资料去... --------------------编程问答-------------------- 我没说你一定要回答这个问题,我只是觉得你很狂。我认为你说错了,我就举一个例子,而你在说我的时候,不举例子。而是很不屑的说,你先去学学lambda去。好像我是刚毕业的小白啊。 --------------------编程问答-------------------- 不要吵架哦,都是来学习的嘛 --------------------编程问答-------------------- 学习学习~~~~~~~~~~ --------------------编程问答-------------------- 恩 扛上
补充:.NET技术 , C#