using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/// <summary>
/// C#中的委托就是一个指向方法的参数,可以把一个委托类型作为参数传递到另外一个方法里面。
/// C#里面内置的委托类型有Action 和 Func
/// Action是无返回值,可为无参数,无返回值,可以利用泛型传递参数的委托,Func是有返回值,也可以利用泛型传递多个参数,最后一个是Out 返回值,如果只有一个参数,则默认无返回值,不可为无参数
/// 委托也可以进行重新赋值(方法),就想参数赋值一样即可
/// </summary>
namespace 委托
{
class Program
{
//委托的声明和类的类试
private delegate void voidDele();
private delegate int intDele();
private delegate int paraDele(int para1,int para2,int para3);
private static void printString()
{
Console.WriteLine("无参数");
}
private static int intReturn()
{
return 0;
}
private static string printFuncString()
{
Console.WriteLine("Func一定会有返回值");
return "一定会有返回值";
}
private static int printString(int i)
{
Console.WriteLine("无参数类型有返回类型");
return 0;
}
private static void printString(int i0,int i1)
{
Console.WriteLine(i0+i1);
}
private static int printString(int i0,int i1,int i2)
{
return i0 + i1+i2;
}
/// <summary>
/// 匿名函数与委托
/// 匿名函数没有名字,无法直接调用,多用与赋值给委托,便于后面回调函数,声明是需要有 delegate
/// lambda是匿名函数的简写形式,一个参数,一个返回值的时候可以省略括号和return
/// </summary>
static void Main(string[] args)
{
//委托的声明也像类一样需要各自对应委托的类型
voidDele voidDele0 = printString;
intDele intDele0 = intReturn; //一定要依据重载关系来判断能否找到相应的函数
paraDele para0 = printString;
Action act00 = printString;
act00();
Action<int, int> act01 = printString;//重载里面会自动寻找相对应的方法
act01(10,10);
Func<string> fun00 = printFuncString;
fun00();
Func<int, int> fun01 = printString;
fun01(10);
Func<int, int, int> Noname = delegate (int para1, int para2)
{
return para1 + para2;
};
//lambda
Func<int, int, int> NewName = (int para1, int para2) =>
{
return para1 + para2;
};
Func<int, int> OneName = para2 => para2++;
Console.ReadKey();
}
}
}
C#-委托与lambda表达式
猜你喜欢
转载自blog.csdn.net/Icecoldless/article/details/81840755
今日推荐
周排行