委托及反射

本文介绍了委托的概念,它是一种类型,可以声明委托类型变量,并用于实现事件。事件是委托的封装,提供了安全的注册和注销机制。反射则允许动态获取和操作程序集中的类型和成员信息,是.NET中的一种重要特性。此外,还讨论了构造函数的多样性和程序集在.NET框架中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

委托及事件

委托是一种类型.像类一样,可以声明委托类型变量.
匿名方法:通常只能用一次的方法,通常使用委托来实现.
委托的可以执行事件的事情,但是不安全.
委托可以直接调用
事件只能+=-=调用
事件语法: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 存储着文件信息.
关于事件的案例
这是开发控件的人写的代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值