将方法作为方法的参数
//声明委托
internal delegate int MyAddFunDel(int a, int b);
static void Main(string[] args)
{
MyAddFunDel delFun = new MyAddFunDel(Add); //这里将方法作为参数
Console.WriteLine(delFun(2, 3));
Console.ReadKey();
}
//加法
static int Add(int a, int b)
{
Console.WriteLine("加法....执行了");
return a + b;
}
//减法
static int Sub(int a, int b)
{
Console.WriteLine("加法....执行了");
return a - b;
} 结果为:委托链 将多个方法捆绑到同一个委托对象上,形成委托链,当调用这个委托对象时,将依次调用委托链中的方法。
委托可以绑定一个方法,那么也应该有办法取消对方法的绑定,很容易想到,这个语法是“-=”:
static void Main(string[] args)
{
MyAddFunDel delFun = new MyAddFunDel(Add);
delFun += Sub; //此时在委托中又捆绑了一个方法。
Console.WriteLine(delFun(2, 3)); //这里会输出哪个方法的返回值呢!?
Console.ReadKey();
}结果: 这里输出了Sub方法的返回值。 匿名函数
static void Main(string[] args)
{
//MyAddFunDel delFun = new MyAddFunDel(Add);
//delFun += Sub;
//Console.WriteLine(delFun(2, 3));
//MyAddFunDel delFun = delegate(int a, int b) { return a + b; }; //匿名函数
MyAddFunDel delFun = (int a, int b) => a + b; //Lambda表达式
Console.WriteLine(delFun(1, 2));
Console.ReadKey();
}泛型委托 static void Main(string[] args)
{
//一共有16个输入参数,最后一个约束返回值
Func<int, bool> del = a => a > 2; //输入类型int,输出类型bool ---带输出参数的泛型委托
//Action<int,int> 不带输出参数的泛型委托
List<int> list = new List<int>() {
1,
2,
3,
4,
5
};
var temp = list.Where(del);
foreach (var item in temp)
{
Console.WriteLine(item);
}
Console.ReadKey();
}输出3,4,5
2228

被折叠的 条评论
为什么被折叠?



