C# 委托汇总
委托汇总以及遗留问题:
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# 委托汇总的更多相关文章
- [译]前端JS面试题汇总 Part 1(事件委托/this关键字/原型链/AMD与CommonJS/自执行函数)
原文:https://github.com/yangshun/front-end-interview-handbook/blob/master/questions/javascript-questio ...
- 自学MVC看这里——全网最全ASP.NET MVC 教程汇总
MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口.本文从 ...
- 转载:《.NET 编程结构》专题汇总(C#)
<.NET 编程结构>专题汇总(C#) - M守护神 - 博客园http://www.cnblogs.com/liusuqi/p/3213597.html 前言 掌握一门技术,首要 ...
- 收藏所用C#技术类面试、笔试题汇总
技术类面试.笔试题汇总 注:标明*的问题属于选择性掌握的内容,能掌握更好,没掌握也没关系. 下面的参考解答只是帮助大家理解,不用背,面试题.笔试题千变万化,不要梦想着把题覆盖了,下面的题是供大家查漏补 ...
- [转]eoe社区cocos2d-x游戏引擎知识大汇总
[eoeAndroid 社区]特意为大家汇总了cocos2d-x知识贴,分量十足,纯正干或.从基础教程到游戏应用的开发,我们不让知识流失,我们要做知识的搬运工还有加工 师.希望大家能够一起的学习,和大 ...
- ASP.NET MVC 教程汇总
自学MVC看这里——全网最全ASP.NET MVC 教程汇总 MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要 ...
- 【温故而知新-万花筒】C# 异步编程 逆变 协变 委托 事件 事件参数 迭代 线程、多线程、线程池、后台线程
额基本脱离了2.0 3.5的时代了.在.net 4.0+ 时代.一切都是辣么简单! 参考文档: http://www.cnblogs.com/linzheng/archive/2012/04/11/2 ...
- 《WCF技术剖析》博文系列汇总[持续更新中]
原文:<WCF技术剖析>博文系列汇总[持续更新中] 近半年以来,一直忙于我的第一本WCF专著<WCF技术剖析(卷1)>的写作,一直无暇管理自己的Blog.在<WCF技术剖 ...
- 全网最全ASP.NET MVC 教程汇总
全网最全ASP.NET MVC 教程汇总 MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MV ...
随机推荐
- Java分割面板和选项卡面板的应用
1.分割面板 JSplitPane类的常用构造方法 构造方法 说明 JSplitPane() 创建一个默认的分割面板.默认情况下为在水平方向上分割,重绘方式为只在调整分隔条位置完成时重绘 JSplit ...
- base64转图片、图片转base64、图片拼接、加水印(水印角度可设置)
/** * @Description: 将base64编码字符串转换为图片 * @param imgStr * base64编码字符串 * @param path * 图片路径-具体到文件 * @re ...
- html格式化输出JSON( 测试接口)
将 json 数据以美观的缩进格式显示出来,借助最简单的 JSON.stringify 函数就可以了,因为此函数还有不常用的后面2个参数. 见MDN https://developer.mozilla ...
- [TimLinux] JavaScript 中循环执行和定时执行
1. 两对函数 // 循环执行 // 在每个毫秒数之后,调用函数 var timeid = window.setInterval(函数名, 毫秒数); window.clearInterval(tim ...
- Linux下RocketMQ下载安装教程
一.下载 1.官网下载:下载地址 2.百度网盘下载:下载地址 提取码:0g5a java开发工具下载地址及安装教程大全,点这里. 更多深度技术文章,在这里. 二.安装及启动 1.将zip文件上传到 ...
- nitacm第十六届浙江大学宁波理工学院程序设计大赛总结
校赛时间:2019.11.30周六下午12:00-16:00 重现赛链接:https://ac.nowcoder.com/acm/contest/2995#question 体验: 11点多到达石鳞大 ...
- HDU2255 奔小康赚小钱钱(二分图-最大带权匹配)
传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百姓没房子 ...
- CSU OJ 2148 梦皮神
Description Wells最近经常做一些有皮神出现的梦. 在这一次梦中Wells把皮神(Pikachu)弄丢了,Wells在一个正 N 边形区域的中心开始自闭,Wells想找回皮神,同时皮神也 ...
- usb工业相机之硬件设计-双缓冲-双端口sdram-fpga
usb工业相机之硬件设计-双缓冲-双端口sdram-fpga 在前期的产品设计中,采用cb提供的结构,68013直接操作摄像头,iic配置摄像头寄存器,板载晶振提供时钟,摄像头的pclk直接接ifcl ...
- 【React】377- 实现 React 中的状态自动保存
点击上方"前端自习课"关注,学习起来~ 作者:陈俊宇 https://github.com/CJY0208 什么是状态保存? 假设有下述场景: 移动端中,用户访问了一个列表页,上拉 ...