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 ...
随机推荐
- tomcat部署项目,详细!
一.导出war包 1.先导出项目的war包(idea为例) 点+号,选择 之后点ok,确定,关闭窗口,回到idea主页面 在弹出窗口中选择新建的war,选build 之后在war导出目录,找到这个wa ...
- Scheme实现数字电路仿真(1)——组合电路
EDA是个很大的话题,本系列只针对其中一小部分,数字电路的仿真,叙述一点概念性的东西,并不会过于深入,这方面的内容实则是无底洞.本系列并不是真的要做EDA,按照SICP里的相关内容,采用Lisp的方言 ...
- Too many open files的四种解决办法【华为云技术分享】
[摘要] Too many open files有四种可能:一 单个进程打开文件句柄数过多,二 操作系统打开的文件句柄数过多,三 systemd对该进程进行了限制,四 inotify达到上限. 领导见 ...
- 充满含金量的一场云原生Meetup,入场券免费发送中……
在武汉,你离这场云原生盛会,只有一步之遥 华为云.百度.斗鱼.海云基因,五位重量级专家 K8s调度.深度学习平台.斗鱼实战.基因大数据-五个干货议题 日,与您相约Cloud Native Days C ...
- 大型情感剧集Selenium:1_介绍 #华为云·寻找黑马程序员#
学习selenium能做什么? 很多书籍.文章中是这么定义selenium的: Selenium 是开源的自动化测试工具,它主要是用于Web 应用程序的自动化测试,不只局限于此,同时支持所有基于web ...
- composer install 或 update 速度慢的解决方案(composer加速)
我们在使用composer install和composer update时,有的时候安装和更新速度非常慢,我们可以通过下面的几个方法来解决这个问题. 首先查看一下当前的 composer 全局配置地 ...
- sbt assembly a fat jar for spark-submit cluster model
在用spark-submit提交作业时,用sbt package打包好的jar程序,可以很好的运行在client模式,当在cluster模式, 一直报错:Exception in thread &qu ...
- luogu P1031 均分纸牌
题目很简单,但是可以学一学贪心策略 把纸牌均匀分布,从左往右推掉不用的纸牌 #include <iostream> using namespace std; int main() { in ...
- 17-Python执行JS代码--PyExecJS、PyV8、Js2Py
一.Python执行JS代码--PyExecJS.PyV8.Js2Py 1.1.PyExecJS PyExecJS的优点是您不需要照顾JavaScript环境.特别是,它可以在Windows环境中运行 ...
- git 使用详解(6)—— 3种撤消操作
接下来,我们会介绍一些基本的撤消操作相关的命令.请注意,有些操作并不总是可以撤消的,所以请务必谨慎小心,一旦失误,就有可能丢失部分工作成果. 修改最后一次提交 git commit --amend 有 ...