委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为,通俗的讲委托就是把方法当做参数来调用。
class FristPage { //定义委托 //委托必须定义在方法体外边 //delegate 返回类型 委托名称(参数类型 参数); delegate void StringDeleGate(string value); //委托调用的方法 //必须是静态的(static) public static void GetFrist(string value) { Console.Write("我是老大" + value); } public static void GetSecond(string value) { Console.Write("我是二当家的" + value); } static void main(string[] args) { //实例化委托;把委托方法注册到委托中 StringDeleGate newdelegate = new StringDeleGate(GetFrist); //一个委托可以注册多个方法;执行时,按注册的先后执行 newdelegate += new StringDeleGate(GetSecond); //调用传参 newdelegate("大爷"); //删除注册GetFrist方法 newdelegate -= new StringDeleGate(GetFrist); newdelegate("二爷"); Console.ReadLine(); //执行时,将先执行GetFrist方法,再执行GetSecond方法 //委托:先把方法注册到委托上,调用时才执行方法 } }
匿名函数是一个“内联”语句或表达式,可在需要委托类型的任何地方使用。可以使用匿名函数来初始化命名委托,或传递命名委托(而不是命名委托类型)作为方法参数。共有两种匿名函数
-
Lambda 表达式
-
匿名方法
class FristPage { //匿名函数:是对委托的一种简化 //定义委托 delegate void StringDeleGate(string value); static void main(string[] args) { //实例化委托并注册匿名函数 //语法 delegate(参数类型,参数){ xxxx 方法体} //方法体直接写在委托里 StringDeleGate newDele = delegate(string value) { Console.Write(value + "注册deletegate"); }; //注册多个匿名函数 newDele += delegate(string value) { Console.Write(value + value + value + "注册deletegate"); }; //调用委托 newDele("大爷"); } }
“Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型。 所有 Lambda 表达式都使用 Lambda 运算符 =>,该运算符读为“goes to”。该 Lambda 运算符的左边是输入参数(如果有),右边包含表达式或语句块。Lambda 表达式 x => x * x 读作“x goes to x times x”。
class FristPage { //Lambda表达式:是对委托的一种简化,是匿名函数的一种 //定义委托 delegate void StringDeleGate(string value); static void main(string[] args) { //实例化委托并注册表达式 //语法:x=>(AAAA) AAAA:为方法体; X为参数 //方法体直接写在委托里 StringDeleGate newDele = (x =>Console.Write( x + "匿名函数")); //注册多个Lambda表达式 newDele += (x => Console.Write(x + "匿名函数"+x)); //调用委托 newDele("大爷"); //Lambda表达式将依次调用进行 } }