定义:一段函数或表达式,直接嵌套在程序里面,没有名称;和c#中的委托有密切的联系;
委托:相当于把函数传递到程序里;匿名:把没有名称的函数传递到程序里
1.三种写法的区分:普通函数delegate获取 | 匿名函数delegate获取 | Lambda表达式函数delegate获取
using System;
using System.Collections.Generic;
using System.Text;
namespace Anonymous
{
class Program
{
delegate void TestDelegate(string s);
static void MethodTest(string s)
{
Console.WriteLine(s);
}
static void Main(string[] args)
{
TestDelegate tdA = new TestDelegate(MethodTest);
//c# 2.0 匿名方法
TestDelegate tdB = delegate (string s) { Console.WriteLine(s); };
//c# 3.0 Lambda写法
TestDelegate tdC = (x) => { Console.WriteLine(x); };
}
}
}
2.泛型代理的应用
现在知道了可以这么用,但是还不知道什么时候这么用。待日后再说。
目前还是觉得直接调用一个方法比较方便。我干嘛要获得这个函数引用(delegate),然后通过这种方式调用函数?可能这种lambda和匿名函数中用到代理的地方比较多。看上去写起来较为方便简洁?
add:
看了Enumerable.Where 方法,就是跟这玩意一样一样的。
delegate 返回值泛型 方法名<定义用到的泛型1,定义用到的泛型2 .... >(传入参数泛型)
using System;
using System.Collections.Generic;
using System.Text;
namespace Anonymous
{
delegate int del(int i);
delegate TResult Func<TArg0, TResult>(TArg0 arg0);
class Program
{
static void Main(string[] args)
{
Lambda();
Console.ReadLine();
}
private static void StartThread()
{
System.Threading.Thread t1 = new System.Threading.Thread
(delegate ()
{
Console.WriteLine("Hi! ");
Console.WriteLine("Here comes Wenxuejia!");
});
t1.Start();
}
private static void Lambda()
{
del myDelegate = (x) => { return x * x; };
Console.WriteLine(myDelegate(5));
Func<int, bool> myFunc = x => x == 5;
Console.WriteLine(myFunc(4));
Console.WriteLine(myFunc(5));
}
}
}