C#代理那点事儿
Func代理是啥?
Func代理接收0个或多个参数,返回TResult值;
以Func<TSource, TResult>为例:Func带来封装一个方法,该方法接收一个参数,然会一个TResult类型。
举个最简单的例子,求一个一维整数数组的和
private static void Demo()
{
Func<int[], int> MySum = arr =>
{
int total = ;
foreach (int i in arr)
total += i; return total;
}; int[] data = new int[] { , , , , , , , , , };
int result = MySum(data); Console.WriteLine(result);
}
Sum
OK,我们继续,如果我们希望复杂一点:先对数组过滤,然后求和,那么我们的代码应该如下:
private static void Demo3()
{ int[] data = new int[] { , , , , , , , , , };
int result = data.FilterAndSum(a => a > ); Console.WriteLine(result);
} public static class MyExtension
{
public static int FilterAndSum(this int[] source, Func<int, bool> selector)
{
int total = ;
foreach (int s in source)
if (selector(s))
total += s; return total;
}
}
FilterAndSum
如果,我们希望我们的扩展方法,可以支持更改多的类型,那么我们可以这样的实现扩展方法
public static int SelectAndSum<TSource>(this IList<TSource> source, Func<TSource, int> selector)
{
int total = ; foreach (TSource s in source)
total += selector(s); return total;
} ...... private static void Demo()
{
IList<Staff> list = new List<Staff> {
new Staff{FirstName="AAA", LastName="", Salary=},
new Staff{FirstName="BBB", LastName="", Salary=}
};
int result = list.SelectAndSum(s => s.Salary); Console.WriteLine(result);
}
Generic Extend method
另外,如果我们想自己扩展IEnumerable,那么现在我们就知道应该这样:
public static IEnumerable<TSource> CustomMethod<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> selector)
{
foreach(TSource s in source)
if(selector(s))
yield return s;
}
... private static void Demo4()
{
IList<Staff> list = new List<Staff> {
new Staff{FirstName="Tom", LastName="Ng", Salary=},
new Staff{FirstName="Simon", LastName="Wong", Salary=}
}; IEnumerable<Staff> list2 = list.CustomMethod(s => s.Salary > ); Console.WriteLine(list2.Count());
}
Extend IEnumerable
那么Action代理呢
Action代理不返回值,它可以接受一个或多个参数。
那么Delegete类呢?
代理就是一个指向某个类的静态方法,或者指向实例类的实例方法。
那么代理呢?
代理是定义了方法签名的类型。当你实例化一个代理类型时,你可以把该代理实例指向与代理签名相兼容的方法。然后通过代理实例调用所指向的方法
C#代理那点事儿的更多相关文章
- 设计模式-代理模式(Proxy Model)
文 / vincentzh 原文连接:http://www.cnblogs.com/vincentzh/p/5988145.html 目录 1.写在前面 2.概述 3.目的 4.结构组成 5.实现 5 ...
- 【原创】JDK动态代理,此次之后,永生难忘。
动态代理,这个词在Java的世界里面经常被提起,尤其是对于部分(这里强调“部分”二字,因为有做了一两年就成大神的,实力强的令人发指,这类人无疑是非常懂动态代理这点小伎俩的)做了一两年新人来说,总是摸不 ...
- JDK动态代理,此次之后,永生难忘
出自:http://www.cnblogs.com/dreamroute/p/5273888.html#3839242 首先感谢"神一样的存在"的文章! 动态代理,这个词在Java ...
- springIOC的那些事
springIOC动态代理的那些事儿 1.发现问题 今天在使用spring的IOC容器时发现了这样的一个问题: 首先有一个接口定义如下: public interface BookShopSer ...
- PHP-客户端的IP地址伪造、CDN、反向代理、获取的那些事儿
外界流传的JAVA/PHP服务器端获取客户端IP都是这么取的: 伪代码: 1)ip = request.getHeader("X-FORWARDED-FOR") 可伪造,参 ...
- 关于Java代理那些事儿
代理是啥?就是代替你执行你持有的主要功能,并且能在你的基础之上完成一些其他的功能.代理的目的就是生成一个和原对象具有同样功能的对象.在Java中,代理是一种设计模式.在Spring的面向切面编程(AO ...
- webpack 教程 那些事儿04-webpack项目实战分析
这节主要讲解真正项目用用到的 webpack配置问题,项目实战篇 就像我们不会完全做一个项目,不用别人的轮子一样.这个配置我们借用 vue-cli 搭建的配置来研究,因为它已经足够优秀. 有了前面的基 ...
- 豌豆夹Redis解决方式Codis源代码剖析:Proxy代理
豌豆夹Redis解决方式Codis源代码剖析:Proxy代理 1.预备知识 1.1 Codis Codis就不详细说了,摘抄一下GitHub上的一些项目描写叙述: Codis is a proxy b ...
- 豌豆夹Redis解决方案Codis源码剖析:Proxy代理
豌豆夹Redis解决方案Codis源码剖析:Proxy代理 1.预备知识 1.1 Codis Codis就不详细说了,摘抄一下GitHub上的一些项目描述: Codis is a proxy base ...
随机推荐
- EJB到底是什么,真的那么神秘吗??
1. 我们不禁要问,什么是"服务集群"?什么是"企业级开发"? 既然说了EJB 是为了"服务集群"和"企业级开发",那么 ...
- du -sg 和df -g 所看的文件系统大小不一致
最近碰到一个问题: df -g 查看内存,发现空间已经满了,但是到对应目录查看,发现只用了一半的空间,感觉还有一半不见了. 经咨询其他人,给了两个解释: 1.fsck :使用Fsck命令修复损坏的分区 ...
- libqrencode 3.4.3 发布,二维码的C解析库
libqrencode 3.4.3 的命令行增加了 --rle 参数,修复了开发库和命令行工具的一些小 bug. libqrencode (QRencode) 是一个用C语言编写的用来解析二维条形码( ...
- [C#] 與Android共舞–透過GET方式傳資料給Server(含解決中文編碼問題) (转帖)
上一篇文章分享了透過POST 方式傳資料回Server,這一篇來談談有關於透過GET的方式傳遞 首先,如我預期的一樣,透過網址傳遞,會產生編碼問題,這邊我就順代解掉,希望有碰到的人 可以不用為此煩惱. ...
- REST API 安全设计指南
0x01 REST API 简介 REST的全称是REpresentational State Transfer,表示表述性无状态传输,无需session,所以每次请求都得带上身份认证信息.rest是 ...
- solr与.net系列课程(二)solr的配置文件及其含义
solr与.net系列课程(二)solr的配置文件及其含义 本节内容还是不会涉及到.net与数据库的内容,但是不要着急,这都是学时solr必学要掌握的东西,solr可不是像其他的dll文件一样,只需 ...
- Kali linux系列之 zmap 安装
Kali linux系列之 zmap 安装 官方文档地址:https://zmap.io/ 准备:保证有比较顺畅的更新源,可以更新系统,下载安装包. 安装 第一步:sudo apt-get insta ...
- Nim教程【五】
妈蛋,花了两天时间才搞定博客园的API, 比预期的时间整整多了1天, 不管怎么说,总算把博客园的客户端搞定了 这篇文章就是用博客园的客户端发布的, 先贴张图,给大家看看, 后面我会和博客园的领导商量一 ...
- 新手容易混乱的String+和StringBuffer,以及Java的方法参数传递方式。
之前在交流群里和猿友们讨论string+和stringbuffer哪个速度快以及Java的方法参数传递的问题,引起了群里猿友的小讨论.最终LZ得出的结果是string+没有stringbuffer快, ...
- jquery 常用插件
50款最有用的 jQuery 插件集锦<表单篇> 50款最有用的 jQuery 插件集锦<网页布局篇> 50款最有用的 jQuery 插件集锦<内容滑块篇> 50款 ...