委托汇总以及遗留问题:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleDemo.delegateUtil
{
public static class DelegateDemo
{
public delegate string Query(string para1, int para2); public delegate string Select(string p1, string p2, string p3, string p4, string p5, string p6,
string p7, string p8, string p9, string p10, string p11, string p12,
string p13, string p14, string p15, string p16, string p17, string p18); public static void Get()
{
Console.WriteLine("********************************"); {
//.net framework 1.0
Query method = new Query(QueryUser);
var value = method.Invoke("sun", );
Console.WriteLine(value);//返回用户:sun, 年龄:10
} {
//2.0
Query method = new Query(delegate (string para1, int para2)
{ return "返回用户:" + para1 + ", 年龄:" + para2;
}); string value = method.Invoke("sun", );
Console.WriteLine(value);//返回用户:sun, 年龄:20
} {
//3.0
Query method = new Query((string para1, int para2) =>
{
return "返回用户:" + para1 + ", 年龄:" + para2;
});
string value = method.Invoke("sun", );
Console.WriteLine(value);//返回用户:sun, 年龄:30
} {
//c#内置委托,带有一个string参数的,无返回值的匿名方法
Action<string> method = (string para1) =>
{
Console.WriteLine("hello " + para1 + " , age : 40");
};
method.Invoke("sun");
}
{ //Action 最多16个参数
Action<string, string, string, string, string,
string, string, string, string, string,
string, string, string, string, string,
string> method = (p1, p2, p3, p4, p5,
p6, p7, p8, p9, p0,
pq, pw, pe, pr, pp, pl) =>
{
Console.WriteLine("这里就不输出16个参数的值了");
};
method.Invoke("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "");
}
{ //扩展 17个参数如何设置
//自己声明一个带有17个参数的委托
Select method = (p1, p2, p3, p4, p5,
p6, p7, p8, p9, p10,
p11, p12, p13, p14, p15, p16, p17, p18) =>
{ return "这里是带有18个参数的值";
};
var value = method.Invoke("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "");
Console.WriteLine(value);
} {
//内置委托,有参
Func<int, string> method = (id) =>
{ return "我通过传递" + id + ",返回string的值";
};
var value = method.Invoke();
Console.WriteLine(value);
} {
//linq
User u = UserList().Find(t => t.Id == );
Console.WriteLine("linq自带的方法:" + u.Name); //自己定义一个
User tmp = UserList().FindByDemo(t => t.Id == );
Console.WriteLine("自己手写方法:" + tmp.Name); //思考 场景:查询语句会出现多条件的查询(面试中有被问到),如何做到不通过if else判断
IEnumerable<User> list = null;
List<User> datasource = UserList();
if ( == ) //假设过滤条件为用户年纪大于20
{
list = datasource.Where(t => t.Age > );
} if ( == ) //假设过滤条件为用户名字包含i的用户
{
list = datasource.Where(t => t.Name.IndexOf("i") >= );
} //以上场景写法 //合理写法: }
{
//linq to object 之IEnumerable 操作内存 使用内置委托
//linq to sql 之 IQueryable 拼接sql?? 表达式目录树,二叉树
}
Console.WriteLine("********************************");
} private static string QueryUser(string Name, int age)
{
return "返回用户:" + Name + ", 年龄:" + age;
} private static List<User> UserList()
{ List<User> tmp = new List<User>(); tmp.Add(new User() { Id = , Age = , Name = "sun" });
tmp.Add(new User() { Id = , Age = , Name = "bob" });
tmp.Add(new User() { Id = , Age = , Name = "justin" });
tmp.Add(new User() { Id = , Age = , Name = "linda" });
tmp.Add(new User() { Id = , Age = , Name = "lucy" });
tmp.Add(new User() { Id = , Age = , Name = "momo" });
tmp.Add(new User() { Id = , Age = , Name = "any" });
tmp.Add(new User() { Id = , Age = , Name = "lily" }); return tmp; } public static T FindByDemo<T>(this List<T> list, Func<T, bool> expression) where T : class, new()
{
T t = new T();
foreach (var u in list)
{
if (expression.Invoke(u))
{
t = u;
}
} return t;
} } public class User
{ public int Id { get; set; }
public int Age { get; set; }
public string Name { get; set; }
}
}

多播委托:其实也算是调用父类中的Combine和Remove方法实现,如下图所示:

上图对应结果为:

QueryUser:返回用户:sun, 年龄:88

可输出对应的string返回结果,返回结果是最后一个委托方法返回值

C# 委托汇总的更多相关文章

  1. [译]前端JS面试题汇总 Part 1(事件委托/this关键字/原型链/AMD与CommonJS/自执行函数)

    原文:https://github.com/yangshun/front-end-interview-handbook/blob/master/questions/javascript-questio ...

  2. 自学MVC看这里——全网最全ASP.NET MVC 教程汇总

    MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口.本文从 ...

  3. 转载:《.NET 编程结构》专题汇总(C#)

    <.NET 编程结构>专题汇总(C#) - M守护神 - 博客园http://www.cnblogs.com/liusuqi/p/3213597.html 前言     掌握一门技术,首要 ...

  4. 收藏所用C#技术类面试、笔试题汇总

    技术类面试.笔试题汇总 注:标明*的问题属于选择性掌握的内容,能掌握更好,没掌握也没关系. 下面的参考解答只是帮助大家理解,不用背,面试题.笔试题千变万化,不要梦想着把题覆盖了,下面的题是供大家查漏补 ...

  5. [转]eoe社区cocos2d-x游戏引擎知识大汇总

    [eoeAndroid 社区]特意为大家汇总了cocos2d-x知识贴,分量十足,纯正干或.从基础教程到游戏应用的开发,我们不让知识流失,我们要做知识的搬运工还有加工 师.希望大家能够一起的学习,和大 ...

  6. ASP.NET MVC 教程汇总

    自学MVC看这里——全网最全ASP.NET MVC 教程汇总   MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要 ...

  7. 【温故而知新-万花筒】C# 异步编程 逆变 协变 委托 事件 事件参数 迭代 线程、多线程、线程池、后台线程

    额基本脱离了2.0 3.5的时代了.在.net 4.0+ 时代.一切都是辣么简单! 参考文档: http://www.cnblogs.com/linzheng/archive/2012/04/11/2 ...

  8. 《WCF技术剖析》博文系列汇总[持续更新中]

    原文:<WCF技术剖析>博文系列汇总[持续更新中] 近半年以来,一直忙于我的第一本WCF专著<WCF技术剖析(卷1)>的写作,一直无暇管理自己的Blog.在<WCF技术剖 ...

  9. 全网最全ASP.NET MVC 教程汇总

    全网最全ASP.NET MVC 教程汇总 MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MV ...

随机推荐

  1. redis与memcached区别

    不同点: (1) redis中并不是所有数据在有效期内只能常驻内存的(如果需要,可定期同步持久化到磁盘),这是和memcached相比一个最大的区别(memcached中的数据在有效期内是以键值对的形 ...

  2. 一文了解Nuget的使用

    Nuget介绍 官网定义:NuGet是.NET的软件包管理器(免费).NuGet客户端工具提供了生成和使用软件包的能力.NuGet Gallery 是所有软件包作者和消费者都使用的中央软件包存储库. ...

  3. Python正则表达式,看完这篇文章就够了...#华为云&#183;寻找黑马程序员#【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  4. 一文搞懂V8引擎的垃圾回收

    引言 作为目前最流行的JavaScript引擎,V8引擎从出现的那一刻起便广泛受到人们的关注,我们知道,JavaScript可以高效地运行在浏览器和Nodejs这两大宿主环境中,也是因为背后有强大的V ...

  5. luogu P4170 [CQOI2007]涂色

    题目描述 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符串表示这个目标:RGBGR. 每次你可以把一段连续的木版涂成一个 ...

  6. yuv和yCbCr的差异

    一.和rgb之间换算公式的差异 yuv<-->rgb Y'= 0.299*R' + 0.587*G' + 0.114*B' U'= -0.147*R' - 0.289*G' + 0.436 ...

  7. Java 将Excel转为图片、html、XPS、XML、CSV

    通过文档格式转换,可满足不同办公场合对文档操作的需求.本文将介绍转换Excel文档为其他常见文档格式的方法.通过文中的方法,可支持将Excel转换为包括PDF.图片.html.XPS.XML.CSV. ...

  8. 重排数列-Java实现(2018网易校招研发岗)

    题目: 链接:https://www.nowcoder.com/questionTerminal/6c184566ecff4d3baff3536449d4a3e2 来源:牛客网 小易有一个长度为N的正 ...

  9. 开启html元素的编辑模式contenteditable="true"

    开启html元素的编辑模式contenteditable="true"

  10. 一文搞清楚Minor GC、Major GC 、Full GC 之间的关系

    前言 文章要求读者熟悉 JVM 内置的通用垃圾回收原则.堆内存划分为 Eden.Survivor 和 Tenured/Old 空间,代假设和其他不同的 GC 算法超出了本文讨论的范围. Minor G ...