委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为,通俗的讲委托就是把方法当做参数来调用。
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表达式将依次调用进行
}
}