委托
我们先在C#中写一个委托,关键字delegate
delegate void TestDelegate();
委托就是方法的类型
我们现在实现委托
class Program
{
static void Main(string[] args)
{
//实例化这个委托,参数就填和委托方法返回值和参数类型一样的方法名字
TestDelegate Test = new TestDelegate(Test1);
}
public static void Test1()
{
Console.WriteLine("Test1");
}
}
这样就实现了一个委托
我们调用这个委托方法也很简单
Test();
这一步学会之后,我们学着简化之前的写法,new是可以不写的,直接赋值
class Program
{
static void Main(string[] args)
{
TestDelegate Test = Test1;
}
}
组合委托
class Program
{
static void Main(string[] args)
{
TestDelegate Test = Test1;
//再添加一个方法
Test+=Test2;
//现在就回执行两个方法
Test();
//同样的,删除就是-=
Test-=Test1;
}
}
public static void Test2(){
Console.WriteLine("Test2");
}
匿名函数
我们写两个委托,来学习匿名函数的使用
一个是无返回值无参数,一个是有返回值有参数的
delegate void TestDelegate1();
delegate int TestDelegate2(int a,int b);
这次我们不写实体方法了,我们用匿名方法来写
class Program
{
static void Main(string[] args)
{
//这个是无参数,无返回值的写法
TestDelegate1 Test1 = delegate(){
//这是一个无参数无返回值匿名方法
};
//这个是有参数,有返回值
TestDelegate2 Test2 = delegate(int x,int y){
//这是一个有参数有返回值匿名方法
//记得给返回值
return ;
}
}
}
匿名函数基本不用的,但是学习匿名函数,是为啥!?
为了给Lambda表达式过度.
嘿嘿!逃过不的.
Lambda表达式
还是先声明委托
delegate void TestDelegate1();
delegate int TestDelegate2(int a,int b);
我们这次用Lambda表达式简化匿名方法
class Program
{
static void Main(string[] args)
{
//这个是无参数,无返回值的写法
TestDelegate1 Test1 = ()=>{ //这是一个无参数无返回值匿名方法};
//这个是有参数,有返回值
TestDelegate2 Test2 =(int x, int y)=>{
//这是一个有参数有返回值匿名方法
//记得给返回值
return x+y;
}
}
}
好像只是省略了一个关键字,没什么了不起是吧
来我们继续简化
Lambda表达式简化
还能简化,嘿嘿
简化1:如果Lambda表达式方法体中只有一个返回值,那么(大括号和return可以省略)
TestDelegate2 Test2 =(int x, int y)=>x+y;
简化2:Lambda的参数列表,参数类型可以省略不写
TestDelegate2 Test2 =(x, y)=>x+y;
简化3:在Lambda中,如果参数列表中,参数只有一个,那么参数列表的小括号也可以省略
我省略掉类,还有Main方法,直接写了
delegate int TestDelegate3(int a);
TestDelegate3 test3 = x=>x*x;
我们调用,结果是4哈.
Test3(2);