您的位置:首页 > 编程语言 > C#

[我眼中的C#]委托和Lambda表达式

2017-03-17 11:08 190 查看
委托是 C#用来传递方法的引用的语法,和类相同,委托调用之前也要经过定义和声明的过程

private delegate string GetString();
static void Main(string[] args)
{
////委托是一个类型,这个类型可以赋值一个方法的引用
////ToString()是object类型的方法
//int x = 40;
////GetString a=new GetString(x.ToString);//没有括号,说明没有调用这个方法,只是传递一个引用
//GetString a = x.ToString;
////string s = a();
//string s = a.Invoke();
//Console.WriteLine(s);//通过委托类型调用一个方法,跟直接调用一个方法是一样的

//使用委托类型作为方法的参数
PrintString method = Method1;
PrintStr(method);
method = Method2;
PrintStr(method);
Console.ReadKey();
}

private delegate void PrintString();

static void PrintStr(PrintString print)
{
print();
}

static void Method1()
{
Console.WriteLine("Method1");
}
static void Method2()
{
Console.WriteLine("Method2");
}


使用委托可以先创建匿名方法,但是C#提供了更为简单的方法—Lambda表达式

//Lambda表达式用来代替一个匿名方法,所以一个lambda也是定义了一个方法
Func<int, int, int> plusFunc = (arg1, arg2) =>//lambda表达式的参数是不要声明类型的
{
return arg1 + arg2;
};
Console.WriteLine(plusFunc(9,6));
Func<int, int> testFunc = a => a+1;//lambda表达式的参数只有一个的时候可以不加上括号,当函数体的语句只有依据的时候,可以不加上大括号,也可以不加上return语句
Func<int, int> test2Func = (a) =>
{
return a + 1;
};
Console.ReadKey();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lambda delegate