看到他我一下子就悟了---委托
看到大家的留言,我想说下我对委托的了解,首先看它的定义:
委托 就是将方法作为方法的参数
不用先看例子什么的,你就多品味品味这句话,然后你看下使用委托的步骤,
1.定义一个委托
2.注册该委托
3.使用委托
Ok就这么简单,其实委托就像大家常说的那样:
它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里憋得慌,浑身不自在
其实不用怕,你就按着这三步来标准没错,下面来个小例子:
第一步:定义委托
public delegate void GreetingDelegate(string name);
第二步:注册委托
这里先定义一个方法
private static void ChineseGreeting(string name) { Console.WriteLine("早上好, " + name); }
然后注册
GreetingDelegate delegate1+ =ChineseGreeting;
第三步:使用委托
delegate1("houhou");
OK,委托完成,其实不要怕,委托真的很简单……
下面介绍几个已定义好的委托
1.Action Action是无返回值的泛型委托。
static void Main(string[] args){Test<string>(Action,"Hello World!");Test<int>(Action, 1000);Test<string>(p => { Console.WriteLine("{0}", p); }, "Hello World");//使用Lambda表达式定义委托 Console.ReadKey();}public static void Test<T>(Action<T> action, T p){action(p);}private static void Action(string s){Console.WriteLine(s);}private static void Action(int s){Console.WriteLine(s);}
可以使用 Action<T1, T2, T3, T4> 委托以参数形式传递方法,而不用显式声明自定义的委托。 封装的方法必须与此委托定义的方法签名相对应。 也就是说,封装的方法必须具有四个均通过值传递给它的参数,并且不能返回值。 (在 C# 中,该方法必须返回 void)通常,这种方法用于执行某个操作。
2.Func的使用
static void Main(string[] args){Console.WriteLine(Test<int,int>(Fun,100,200));Console.ReadKey();}public static int Test<T1, T2>(Func<T1, T2, int> func, T1 a, T2 b){return func(a, b);}private static int Fun(int a, int b){return a + b;}
Func是有返回值的泛型委托
3.predicate 是返回bool型的泛型委托泛型委托:表示定义一组条件并确定指定对象是否符合这些条件的方法。此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素。
static void Main(string[] args){Point[] points = { new Point(100, 200), new Point(150, 250), new Point(250, 375), new Point(275, 395), new Point(295, 450) };Point first = Array.Find(points, ProductGT10);Console.WriteLine("Found: X = {0}, Y = {1}", first.X, first.Y);Console.ReadKey();}private static bool ProductGT10(Point p){if (p.X * p.Y > 100000){return true;}else{return false;}}
使用带有 Array.Find 方法的 Predicate 委托搜索 Point 结构的数组。如果 X 和 Y 字段的乘积大于 100,000,此委托表示的方法 ProductGT10 将返回 true。Find 方法为数组的每个元素调用此委托,在符合测试条件的第一个点处停止。
看到他我一下子就悟了---委托相关推荐
- 看到他我一下子就悟了-- Lambda表达式
一直对Lambda表达式似懂非懂,平常也用过,就是不太明白有时候还要百度.周六去图书馆看书,看到下面这几句话,一下子就悟了: Lambda表达式(匿名函数),基本形式: (intput paramte ...
- 两万字长文-设计模式总结
设计模式总结 篇幅较长,建议收藏阅读: 底部有公众号.源码等,可先根据目录到最下面扫码关注或 star 源码: 战术总结 从开始学设计模式到现在,算是学了两遍,但是这玩意怎么说呢,不是说学了就能会 ...
- c语言实现汉诺塔(图解)
c语言实现汉诺塔 一.汉诺塔简介 二.汉诺塔的实现 一.汉诺塔简介 汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根 ...
- 参悟JavaScript
引子 编程世界里只存在两种基本元素,一个是数据,一个是代码.编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力. 数据天生就是文静的,总想保持自己固有的本色:而代码却天生活泼,总想改变这个 ...
- 悟透 JavaScript
为什么80%的码农都做不了架构师?>>> 悟透 JavaScript Posted on 2008-02-25 13:32 李战 引子 编程世界里只存在两种基本元素,一个是数据 ...
- 李战java_李战:悟透JavaScript
引子 编程世界里只存在两种基本元素,一个是数据,一个是代码.编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力. 数据天生就是文静的,总想保持自己固有的本色:而代码却天生活泼,总想改变这个 ...
- 李战:悟透JavaScript 【转】
多年前,曾经看过李战大师的"悟透delphi-delphi的原子世界",一直对大师特有的文笔风格记忆犹新,今天无意又看到了大师的"李战:悟透JavaScript" ...
- 悟透JavaScript (强烈推荐)
2019独角兽企业重金招聘Python工程师标准>>> 引子 编程世界里只存在两种基本元素,一个是数据,一个是代码.编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力. ...
- 信息抽取(二)花了一个星期走了无数条弯路终于用TF复现了苏神的《Bert三元关系抽取模型》,我到底悟到了什么?
信息抽取(二)花了一个星期走了无数条弯路终于用TF复现了苏神的<Bert三元关系抽取>模型,我到底悟到了什么? 前言 数据格式与任务目标 模型整体思路 复现代码 数据处理 数据读取 训练数 ...
最新文章
- 准备写个delphi 代码生成器或者说是一个记事本
- java 序列化声明_显式声明默认Java类序列化方法的原因是什么?
- 初学者,学习vue应该从何下手?
- L3-022 地铁一日游 (30 分)-PAT 团体程序设计天梯赛 GPLT
- 安徽省计算机二级水平考试试卷,2010安徽省全国计算机等级考试二级笔试试卷VB试题及答案...
- android webview最新版下载,AndroidWebView最新版
- 全国通用 专升本计算机基础(简答题背诵可用)
- ckplayer6.8 php播放,ckplayer超酷网页视频播放器 6.8
- 了解git裸仓库并利用post-receive自动化部署
- 小程序 web-view 打开 微信公众号文章
- 致远项目管理SPM系统资源管理之资源台班工时管理
- cadence 页间连接符标号的 删除,添加,更新
- vmware不支持linux,vmware不支持opengl
- 归并排序-拓展至三路归并
- 《LightGBM: A Highly Efficient Gradient Boosting Decision Tree》论文笔记
- lisp 河道水面线计算_美国工程兵团河道水面线计算CAD(HEC-RAS)
- 付宇泽20190919-2 功能测试
- 移动安全--44--MobSF-v3.0框架安装与开发环境搭建
- 全志v40 开发板_全志
- 欧洲央行行长:与“主流”货币政策理论商榷