委托及反射

来源:互联网 发布:windows读取ext4文件 编辑:程序博客网 时间:2024/05/20 20:44

委托及事件

委托是一种类型.像类一样,可以声明委托类型变量.
匿名方法:通常只能用一次的方法,通常使用委托来实现.
委托的可以执行事件的事情,但是不安全.
委托可以直接调用
事件只能+=-=调用
事件语法:event ProcessWordDelegate

加上event关键字实现事件机制的好处:
用了event时间,不可以修改事件已经注册的值,不可以冒充事件进行事件通知.在IntUC外部就不能通过OnInt(3)的方式调用注册的委托 只能通过+=-=
定义委托这一步,系统默认是有的,不需要在做

委托和事件的区别:考试常考
委托和事件没有可比性,因为委托是数据类型,事件是对象,可以理解为对委托变量的封装
下面说的是委托的对象(用委托方式实现的时间)和(标准的event方式实现)事件的区别.事件的内部是用委托实现的.(举例子)三种实现事件的区别,直接用委托实现,用私有委托+公有方法模拟事件,直接用event事件实现

因为对于事件来讲,外部只能注册自己 +=,-=注销自己.外界不可以注销其他的注册者,外界不可以主动触发事件,因此如果用Delegate就没法进行上面的控制,因此诞生了事件的语法,add,Remove
事件是用来阉割委托实例的,事件只能add,renove自己,不能赋值,直接只能+=,-=不能=不能外部触发事件

委托的作用:
占位:在不知道将来要执行的方法的具体代码时,可以先用一个委托变量来代替方法调用
(委托的返回值,参数列表要确定)在实际调用之前,需要为这里写代码片委托赋值,否则为null
事件的作用:事件的作用与委托变量一样,只是功能上比委托变量有更多的限制
比如1.只能通过+=或-=来半丁方法. 2只能在类内部调用触发事件
在自定义控件,会大量用到编写控件的时候,会写一些事件,但是当这些事件被触发之后,具体执行的哪些事件处理程序时
编写控件的人没法确定的,这个事件只能通过事件来占位,调用.具体调用的是哪个方法,由使用控件的人来决定
(Click+=new 委托(方法名))

反射

反射就是动态获取程序集中的元数据来操作类型的
反射无处不在,vs智能提示,通过反射获取到累的属性方法,反编译也是通过反射实现
Type类实现反射的一个重要类,通过他我们可以获取类中的所有信息,包括方法,属性
可以动态调用类的属性方法
Type是对类的描述
反射就是直接通过.dll来创建对象,调用成员
先通过一个普通类介绍Type(person)
通过类型元数据来获取对象的一些相关信息,并且还可以实例化对象调用方法
这个就叫反射
反射让创建对象的方式发生了改变
编译器的智能提示就是反射的一个应用

杂项

构造函数是可以有多个的.
程序集是.net中的概念.
.net中的dll于exe文件都是程序集(exe和dll的区别).
程序集(Assembly)可以看做是一堆相关类打一个包,相当于java中的jar包.
AssemblyInfo.cs 存储着文件信息.
关于事件的案例
这是开发控件的人写的代码

0 0
原创粉丝点击