using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _02
{
class Program
{
static void Main(string[] args)
{
#region 匿名方法
/*
匿名方法:没有名字的方法,只用一次
不能再类中直接定义,而是在委托变量赋值的时候,需要赋值一个方法,此时可以“现做现卖”,定义一个匿名方法传递给该委托.
*/
M1Delegate my = M1;
//匿名方法定义(无参数无返回值)
M1Delegate my1 = delegate ()
{
Console.WriteLine("this is 匿名方法");
};
//匿名方法定义(有参数有返回值的匿名方法)
M2Delegate my2 = delegate (string msg)
{
return msg;
};
Console.WriteLine(my2("有参数有返回值的匿名方法"));
//有参数有返回值的匿名方法
AddDeltegate add = delegate (int n1, int n2, int n3)
{
return n1 + n2 + n3;
};
Console.WriteLine(add(1, 2, 3));
#endregion
Console.WriteLine("=================================分割线==================================");
#region lambda表达式
//没有参数没有返回值的方法使用Lambda表达式
M1Delegate l1 = () => { Console.WriteLine("lambda表达式!!!"); };
l1();
//有参数无返回值的方法使用lambda表达式
testDelegate l2 = m => { Console.WriteLine(m); };
l2("有参数无返回值的方法使用lambda表达式");
#endregion
//有参数有返回值的方法使用lambda表达式
AddDeltegate add2 = (x, y, z) => { return x + y + z; };
Console.WriteLine(add(4, 5, 6));
//使用可变参数
Deltegate1 d1 = (arr) => {
int total = 0;
for (int i = 0; i < arr.Length; i++)
{
total += arr[i];
}
return total;
};
Console.WriteLine(d1(1, 2, 3, 4, 5, 6, 7, 8, 9));
Console.ReadKey();
}
static void M1()
{
Console.WriteLine("OK");
}
}
public delegate int Deltegate1(params int [] arr);
public delegate int AddDeltegate(int n1, int n2, int n3);
public delegate string M2Delegate(string MSG);
public delegate void testDelegate(string MSG);
public delegate void M1Delegate();
}