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 ...
随机推荐
- AQS系列(一)- ReentrantLock的加锁
前言 AQS即AbstractQueuedSynchronizer,是JUC包中的一个核心抽象类,JUC包中的绝大多数功能都是直接或间接通过它来实现的.本文是AQS系列的第一篇,后面会持续更新多篇,争 ...
- LeetCode 5282. 转化为全零矩阵的最少反转次数
地址 https://leetcode-cn.com/submissions/detail/39277402/ 题目描述给你一个 m x n 的二进制矩阵 mat. 每一步,你可以选择一个单元格并将它 ...
- netty的调优-及-献上写过注释的源码工程
Netty能干什么? Http服务器 使用Netty可以编写一个 Http服务器, 就像tomcat那样,能接受用户发送的http请求, , 只不过没有实现Servelt规范, 但是它也能解析携带的参 ...
- ThinkPHP5——模型关联(一对一关联)
定义 定义一对一关联使用了hasOne,hasOne方法的参数包括: hasOne('关联模型名','外键名','主键名',['模型别名定义'],'join类型'); 下面定义一个用户表,公司给每个用 ...
- spring redis学习笔记
1.下载: https://github.com/MicrosoftArchive/redis/releases,并解压文件; 2.双击redis-server.exe,运行redis服务器; 3.双 ...
- Mybatis底层源码分析
MyBatis 流程图 Configuration.xml 该配置文件是 MyBatis 的全局配置文件,在这个文件中可以配置诸多项目.常用的内容是别名设置,拦截器设置等. Properties(属性 ...
- mybatis 和servlet使用MVC实现用户登录,注册,退出
普通实现: USerMapper.java: package com.bjsxt.mapper; import org.apache.ibatis.annotations.Param; import ...
- js原生实现链式动画效果
// 1. css样式 div { width: 100px; height: 100px; background: olivedrab; position: absolute; left: 0px; ...
- windows程序设计03_读取utf8文件
这里用到的读取utf8文件的思路特别朴素.先把utf8文件按char读取到内存里.因为utf8是变长的,为了处理方便,在内存里把char转化成wchar_t,这样一个字符就是一个wchar_t.把ut ...
- 使用iCamera 测试AR0331 300w高分辨率摄像头小结
使用iCamera 测试AR0331 300w高分辨率摄像头小结 先看下sensor特性 分辨率最高可达:2048*1536=300w像素 1080p帧率最高可达60fps 本次使用usb2,帧率14 ...