原文链接:http://www.xuebuyuan.com/456117.html
命名方法委托
class MyDelegateTest
{
//步骤1,声明delegate对象
public delegate void MyDelegate(string name);
这是我们欲传递的方法,它与MyDelegate具有相同的参数和返回值类型
public static void MyDelegateMethod(string name)
{
Console.WriteLine("Hello,{0}", name);
}
public static void Main()
{
// 步骤2,创建delegate对象
MyDelegate md = new MyDelegate(MyDelegateTest.MyDelegateMethod);
// 步骤3,调用delegate
md("Michael");
Console.ReadLine();
}
}
匿名方法委托
class AnonymousDelegate
{
private delegate void MyDelegate(string name);
public static void Main()
{
MyDelegate myDelegate = delegate(string name)
{
Console.WriteLine(name);
};
myDelegate("Michael");
Console.ReadLine();
}
}
Lambda表达式
Lambda表达式是C#3.0的一种新语法,语法简洁为编写匿名方法提供了更简明的函数式的句法.
class LambdaTest
{
private delegate void MyDelegate(string name);
public static void Main()
{
//匿名委托
MyDelegate myDelegate = (name) => { Console.WriteLine(name); };
//调用委托
myDelegate("Michael");
Console.ReadLine();
}
}
使用Lambda表达式更简洁,为什么那么简洁.其实是编译器为我们做了很多事情. MyDelegate myDelegate = (name) => { Console.WriteLine(name); }; 这句话编译器在编译的时候会为我们生成一个私有的静态方法.透过ILDASM可以看到。