委托实例化有4种方式,真正算起来就两种(有名与匿名)另外两种又是其变种,最终作用就是便于不同场景中的使用
方式1:通过new 创建委托实例,必须传入一个方法作为参数,否则会报错,因为委托内部的构造函数,需要传递一个方法作为参数
//传入符合委托返回类型和参数列表的方法 完成委托的实例化
ShowDelegate showDelegate = new ShowDelegate(M1);
showDelegate();
方式2:使用赋值的方式,这是C#2.0提供一个更简单的给委托创建实例的方式(赋值必须是符合委托返回类型和参数列表的方法
//C#中实例化委托的一个语法糖而已
ShowDelegate showDelegate =M2;
showDelegate();
委托实例化的语法糖
方式3:匿名委托,为委托赋值一个匿名方法(匿名只是相对而言,反编译查看编译器会自动添加一个编译器独有命名方式的方法名)匿名委托多用于:此方法只使用一次的,以后不再使用的场景中,益处是省的花心思去专门起一个方法名
//匿名委托的本质就是 赋值一个匿名方法
ShowDelegate showDelegate = delegate ()
{
Console.WriteLine("匿名委托");
};
showDelegate();
匿名委托的本质
方式4:Lambda表达式(Linq编程,在数据库,集合等查询中使用非常方便,优点是可以大大减少编程的代码量),其实就是赋予了一个匿名方法(暂时了解)
class Program
{
//delegate 后面跟 void 表示无返回值
public delegate void ShowDelegate1();
public delegate void ShowDelegate2(int num);
//delegate 后面跟int,string等类型 表示有返回值
public delegate int ShowDelegate3();
public delegate int ShowDelegate4(int num);
static void Main(string[] args)
{
//( )小括号中用于参数的传递
//=>相当于 delegate
//{ }大括号相当于匿名方法的方法体
//匿名方法是否有返回值,全看委托的定义
ShowDelegate1 showDelegate1 = () => { Console.WriteLine("Lambda表达式"); };
ShowDelegate2 showDelegate2 = (x) => { x += 1; Console.WriteLine("Lambda表达式" + x); };
ShowDelegate3 showDelegate3 = () => { Console.WriteLine("Lambda表达式"); return 6; };
ShowDelegate4 showDelegate4 = (x) => {
x += 1;
Console.WriteLine("Lambda表达式" + x);
return ++x; };
Console.ReadKey();
}
}
Lambda表达式