![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
委托和事件
陆老师Peter
高校计算机专业教师、项目经理、软件研发负责人。
展开
-
委托(Delegate)汇总
想了解的可以百度一次软件官网。原创 2020-03-16 09:58:41 · 124 阅读 · 0 评论 -
委托和事件(14)——Lambda表达式(1)——Lambda
ProcessStringDelegate p = (s) => { Console.WriteLine(s); };lambda方式使用Filter 委托,非常漂亮:IEnumerable<int> values2 = Filter(values, i=>i>0);Lambda语法详解:s为参数列表,不需要标注类型,因为变量声明中类型已经说明了。=>...原创 2019-08-22 15:13:02 · 185 阅读 · 0 评论 -
LINQ(1)——扩展方法
1. 在StringHelper类中编写QuotedStr方法,使用时恐怖。判断一个字符串是否是正确的Email地址:IsEmail.2. 总感觉不是很好,要是看起来字符串有一个IsEmail方法多好呀。将IsEmail放到一个单独的类中,类声明为static(静态类),方法是静态方法,并且在第一个string上增加this。哇,string类“增加”IsEmail方法了,这只是假象,本质上仍...原创 2019-08-23 11:04:51 · 160 阅读 · 0 评论 -
LINQ(2)——LINQ基础
1. 能做什么,将int数组中大于20的元素排序输出: int[] values = { 30, 5, 99, 77, 102, 8, 12, 35 }; var result = from item in values where item > 20 ord...原创 2019-08-23 12:39:32 · 133 阅读 · 0 评论 -
LINQ(3)——案例:取出现次数最多的三个数
int[] values = { 1, 2, 5, 2, 3, 5, 5, 3, 4, 3, 3 }; var result = from item in values group item by item into g orderby g.Count() descend...原创 2019-08-23 12:45:52 · 556 阅读 · 0 评论 -
LINQ(4)——Linq To Object
查询语句: int[] values = { 30, 5, 99, 77, 102, 8, 12, 35 }; var result = from item in values //foreach(int item in values) where item > 20 ...原创 2019-08-23 12:58:54 · 148 阅读 · 0 评论 -
LINQ(5)——排序,分组
1、orderby item2、orderby person.Age descending3、int[] values = { 1, 2, 5, 2, 3, 5, 5, 3, 4, 3, 3 }; var result = from i in values group i by i into g//按照i进行排...原创 2019-08-23 13:07:17 · 615 阅读 · 0 评论 -
LINQ(6)——LINQ常用扩展方法
下面的方法都是IEnumerable<T>的扩展方法:Average计算平均值; Min最小元素; Max最大元素; Sum元素总和; Count元素数量; Concat连接两个序列;//Unoin all Contains序列是否包含指定元素; Distinct取得序列中的非重复元素; Except获得两个序列的差集; Intersect获得两个序列的交集; ...原创 2019-08-23 13:13:47 · 467 阅读 · 0 评论 -
LINQ(7)——Lambda表达式(2)——LINQ常用lambda扩展方法
1. 以where为例。2. linq的用法最终是编译成lambda用法。原创 2019-08-23 13:15:52 · 169 阅读 · 0 评论 -
委托和事件(15)——简单回顾委托
1、什么是委托? 通俗:就是一个能存放符合某种格式(方法签名)的方法指针的清单。2、委托创建方式准备一个方法:string HelloU(string uName){//方法代码}声 明 委 托:delegate 返回值类型 委托类型名(参数) 例子:delegate string DGSayHi(string uName);创...原创 2019-08-26 19:02:15 · 81 阅读 · 0 评论 -
线程和进程(3)——安全调用线程的步骤
1.声明方法。2.声明委托类型。3.创建委托对象。4.启动线程。5.在线程调用的方法里通过Control的Invoke方法执行委托。示例: public Form1() { InitializeComponent(); //TextBox.CheckForIllegal...原创 2019-08-28 00:31:54 · 118 阅读 · 0 评论 -
委托和事件(13)——匿名方法
使用Delegate的时候很多时候没必要使用一个普通的方法,因为这个方法只有这个Delegate会用,并且只用一次,这时候使用匿名方法最合适。匿名方法就是没有名字的方法。3就是没有名字的int对象。3+5就是两个匿名int对象的相加,允许匿名对象,就允许匿名方法。 ProcessWordDelegate p = delegate(string s) { ...原创 2019-08-22 15:02:12 · 219 阅读 · 0 评论 -
委托和事件(12)——委托和事件的区别
委托和事件没有可比性,因为委托是类型,事件是对象,下面说的是委托的对象(用委托方式实现的事件)和事件(标准的event方式实现)的区别。事件的内部是用委托实现的(事件是用委托来实现的)。(举例子:三种实现事件方式的区别)。因为对于事件来讲,外部只能“注册自己+=、注销自己-=”,外界不可以注销其他的注册者,外界不可以主动触发事件,因此如果用Delegate就没法进行上面的控制,因此诞生了事件这...原创 2019-08-22 14:56:46 · 319 阅读 · 0 评论 -
委托和事件(4)——委托的使用
1. 声明委托的方式:delegate 返回值类型 委托类型名(参数)。比如delegate void StringProcess(string s);注意这里的除了前面的delegate,剩下部分和声明一个函数一样,但是StringProcess不是函数名,而是委托类型名。2. 声明的委托是一种类型,就像int、Person一样,如果要用的话还要声明委托类型的变量,声明委托类型变量的...原创 2019-08-21 23:42:00 · 130 阅读 · 0 评论 -
委托和事件(5)——委托使用案例:对Int数组进行过滤
对一个Int序列(IEnumerable<int>)进行过滤,返回满足要求的元素到新的序列中。delegate bool FilterDelegate(int i);static IEnumerable<int> Filter(IEnumerable<int> values, FilterDelegate query)学了lambda用起来更简单。...原创 2019-08-22 00:05:43 · 135 阅读 · 0 评论 -
委托和事件(6)——委托使用案例:字符串数组处理
delegate string ProcessDelegate(string s); static void ProcessArray(ProcessDelegate p) { string[] values = new string[] { "aB","Cd"}; for (int i = 0; i < values.Len...原创 2019-08-22 00:33:14 · 125 阅读 · 0 评论 -
委托和事件(1)——程序集
1. 程序集(Assembly),可以看做是一堆相关类打一个包,相当于java中的jar包。打包的目的:程序中只引用必须的程序集,减小程序的尺寸;一些程序集内部的类不想让其他程序集调用。2. 我们调用的类都是位于各个程序集中,如果调用的类在没有引用的程序集中,则需要添加对那个程序集的引用,比如ConfigurationManager。3. 访问级别:private(本类内部才能调用)、pu...原创 2019-08-21 21:54:47 · 257 阅读 · 0 评论 -
委托和事件(2)——访问级别约束
1. 访问级别约束:子类访问级别不能比父类高(等级观念),因为子类能够出席的场合父类都应该能出席,如果父类可访问级别比子类低就有了父类去不了的场合(儿子能去的地方爹一定要能去)。举例;方法、属性等暴露的返回值、参数的数据类型不能比方法、属性或者所在类的可访问级别低,因为这些方法、属性要能在高级场合出现,如果用到的类型却不能在这个场合出现就明显不合理了。2. 把方法暴露出程序集。附加:1...原创 2019-08-21 21:59:19 · 152 阅读 · 0 评论 -
委托和事件(7)——委托使用案例:数据验证控件
编写UserControl,UserControl内有一个textbox,需要对textbox中的值进行验证。将验证时机、验证报错等写在UserControl中,把数据的不同的校验逻辑通过Delegate动态指定。public Validate Validator; private void textBox1_Validating(object sender, CancelEventArg...原创 2019-08-22 14:28:04 · 124 阅读 · 0 评论 -
委托和事件(9)——为委托的增减方法
d+=SayHello,为委托增加一个方法,不要感觉奇怪,因为它就是d=d+ SayHello 。d-=SayHello,将方法从委托中移除。原创 2019-08-22 14:34:12 · 94 阅读 · 0 评论 -
委托和事件(8)——委托的组合
delegate void ProcessWordDelegate(string s)ProcessWordDelegate d = new ProcessWordDelegate(SayHello)+new ProcessWordDelegate(ToLower)组合的委托必须是同一个类型。相当于创建了一个按照组合的顺序依次调用的新委托对象。委托的组合一般是给事件用的,用普通的委...原创 2019-08-22 14:32:44 · 127 阅读 · 0 评论 -
委托和事件(10)——事件
1. 事件语法:eventProcessWordDelegate{add{...},remove{...}}add、remove和属性、索引一样最终都编译成两个方法。2. 如果是简单的增加委托,没有特殊的判断逻辑可以简写,一般情况下都是简写。3. 加了event关键字实现事件机制的好处:用了event事件,不可以修改事件已经注册的值;不可以冒充进行事件通知了。在IntUC类外部就不...原创 2019-08-22 14:45:02 · 130 阅读 · 0 评论 -
委托和事件(11)——事件本质论
event会自动生成一个private delegate变量和两个函数: add和remove,C#编译器用这两个方法支持+=和-=操作符。C#<>.Net。public event MyDelegate OnEvent;//内部实现是(示例性)private MyDelegate OnEvent;public void Add(MyDelegate d){ OnE...原创 2019-08-22 14:49:15 · 99 阅读 · 0 评论 -
委托和事件(3)——为什么有委托
1. 使用变量的好处:6*2:计算6的二倍 i*2:计算变量i指向的值的二倍,这样就可以计算任意数的二倍。在写这个程序的时候程序员也不知道i是几。 6*2→i*2,i就是在扣窟窿。2. 多态:Person p1 = CreatePerson(); //p1可能是中国人,可能是日本人,也可能是韩国人。p1.SayHello(); //程序员也不知道p1到底指向哪个类。3. ...原创 2019-08-21 22:26:13 · 128 阅读 · 0 评论