6-9笔记

0、多播委托:多播委托中的方法调用顺序和增加方法时的顺序是一致的。但是不要依赖这个顺序。在多播委托中如果有返回值,只会得到最后一个方法调用的返回结果。

1、 通过遍历,调用委托中的每个方法,实现获取每个方法的返回值。(要记得接收返回值)。通过调用GetInvocationList()方法,返回当前委托中的所有的方法返回值类型是一个Delegate数组(委托数组)所有定义的委托都是继承自抽象类MulticastDelegate,而MulticastDelegate又继承自Delegate类(abstract )。

委托的组合一般是给事件用的,用普通的委托的时候很少用。

2、 多播委托内部是将绑定在当前委托对象上的每个方法,都转换为一个委托对象,并且存储在了一个叫_invocationList的object 数组中。然后当调用委托的时候,其实就是循环遍历_invocationList数组,并且调用其中的每一个委托。

3、在多播委托中,如果其中某个方法执行时发生了异常,则后续的方法不再执行。使用委托时,如果不是+=而是直接使用=赋值,会将前面绑定的其他方法(委托)都覆盖掉。但第一个必须用=,不能用+=,null是不能+ 的。

4、多播委托也只能存储同一类型的委托。建议使用的时候尽量少定义自己的委托,使用系统已经有的委托。

5、 委托具有和string一样的不可变性。委托类( System.MulticastDelegate )的3个重要成员:methodPtr、_target来自Delegate类;_invocationList来自MulticastDelegate类。//实际上是一个Delegate[]类型。

6、事件:观察生成的代码,就可以发现,其实, 事件最终是生成了:1>一个私有的委托;2>两个public的方法Add和Remove,分别实现事件的+=和-=。事件是委托的一个变量。

7、重要: 委托(一个数据类型)和事件(数据类型的一个变量)没有可比性,因为委托是类型,事件是对象(可以理解为对委托变量的封装)。事件的内部是用委托实现的。 对于事件来讲,外部只能“注册自己+=,注销自己-=”外界不可以注销其他注册者,外界不可以主动触发事件。如果用Delegate就没法进行上面的控制,因此诞生了事件这种语法。事件是用来阉割委托实例的。事件只能+=,-=,不能=,不能外部触发事件。

8、 委托的作用:占位,在不知道将来要执行的方法的具体代码时候,可以先用一个委托变量来代替方法调用(委托的返回值,参数列表要确定),在实际调用前需要为委托赋值,否则为null。事件的作用:与委托变量一样,只是在功能上比委托变量有更多的限制。(比如:1只能通过+=或-=来绑定方法;2:只能在类内部调用(触发)事件)事件在哪个类中定义的,就只能在该类中调用;

9、程序集(Assembly):是.net中的概念。.net中的dll与exe文件都是程序集。
exe中有主函数,有入口函数,可以执行;dll中没有主函数,没有入口函数。
可以看做是一对相关类打一个包。程序集包含:资源文件、IL代码、程序集元数据、类型元数据(以二进制形式描述在代码中定义的每一个类型和成员);【使用程序集的好处:只引用必须的程序集,减小程序尺寸,程序集可以封装一些代码,只提供必要的访问接口】。
dll:动态链接库(dynamic link library)。GAC(全局程序集缓存)。

10、 反射:简单的理解就是通过元数据创建对象,调用对象的成员。反射就是动态获取程序集的元数据的功能。

11、Type类是实现反射的一个重要的类,通过它我们可以获取类中的所有信息,包括方法,属性等。Type是对类的描述。

12、反射就是直接通过.dll来创建对象,调用成员。

13、通过类型元数据来获取对象的一些相关信息,并且还可以实例化对象调用方法等,这个就叫“反射”。反射让创建对象的方式发生了改变。

14、Type类的使用:
通过类来获得Type; Type t=typeof(Person);通过对象来获得类的Type:Type t=p.GetType();

15、Assembly asm=Assembly.LoadFile("c:\abc.dll")
通过Assembly的GetExportedTypes方法可以得到Assembly中定义的所有的public类型。通过调用Assembly的GetTypes()方法可以得到Assembly中定义的所有的类型。通过Assembly的GetType(name)方法可以得到Assembly中的定义的全名为name的类型信息。

16、Activator.CreateInstance(Type t)会动态调用类的无参构造函数创建一个对象,返回值就是创建的对象,如果没有无参构造函数就会报错。GetConstructor(参数列表),这个是找带参数的构造函数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值