黑马程序员-- .net基础加强8之委托,事件,程序集

一.委托
=====================================
 
1//定义一个委托
// 1.使用delegate关键字
//2. 这个委托要存储的方法如果没有返回值, 那么委托也要定义成void.
//如果没有参数,那么将来传递的方法也不能有参数。 
委托是一个数据类型,用的时候需要传递一个变量 
2.委托的作用就是:可以在某个代码内部,嵌入一段外部代码。相当于:注入
3.什么时候用到委托
自定义的控件中的事件会大量使用到委托
即写事件的时候会用到委托。
4.匿名方法
1 不带参数
 MethodDelegate myMethod=delegate()
{
  Cosole.WriteLine("匿名方法");
};
2 带参数
 MethodDelegate myMethod=delegate(string name)
{
  Cosole.WriteLine(name);
};
myMethod("zdp");
 
二.多播委托
=====================================
1.就是一个委托可以调用多个方法
 
2.多播委托中,如果要是有返回值,指挥得到最后一个方法的返回值,因为被覆盖了。
要想获得多个方法的返回值
//通过调用GetInvocationList(),得到当前委托中的每个方法
//所有定义的委托都继承自muticastDelegate,而muticastDelegate又继承自Delegate(抽象类)
//多播委托内部是将绑定在当前委托对象中的每个方法,都转换为一个委托对象。
Delegate [] delegates=yd.GetInvocationList();
3.如何去掉当前委托中的某个方法
m-=M3();
4.会覆盖之前的M1和M2方法
m=M3();
5.多播委托中也是只能存储同一类型的委托
 
三.事件
=====================================
1.通过委托来实现事件的功能的问题
 1.可以在类的外部触发.因为委托变量是public的
  2.由于委托可以用=复制,会覆盖之前的事件。
------------------------------------
2.事件只能通过+=或者-=来赋值,避免了覆盖问题
3 委托是类型,事件是对象。
 
四.程序集
=====================================
1 .net中的dll和exe文件都是程序集
程序集,可以看做是一堆相关类打一个包,相等于java中的jar包
一.加载指定的程序集,并且获取该程序集中的所有类型
二 加载程序集,获取Class1下的所有非protectde与非private方法
 
1.加载程序集
Assembly asm=Assembly.LoadFile(@"c:\TestLib.dll");
2.获取Class1这个类型
Type typeClass1=asm.GetType("TestLib.Class1");
3 获取Class1中的所有的方法
MethodInfo [] minfos=typeClass1.GetMethods();
 
foreach(MethodInfo methodItem in minfos)
{
 Console.WriteLine(methodItem.Name);
}
Console.ReadKey();

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。