---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

一.委托
=====================================
 
1//定义一个委托
// 1.使用delegate关键字
//2. 这个委托要存储的方法如果没有返回值, 那么委托也要定义成void.
//如果没有参数,那么将来传递的方法也不能有参数。 
委托是一个数据类型,用的时候需要传递一个变量 
------------------------------
public delegate void MethodDelegate(); 
class program
{
    static void Main(string [] args)
{
   Test(M1);
   //声明委托变量myMethod,讲m2方法赋值给myMethod变量 
   MethodDelegate myMethod=M2;
   myMethod();
   
 
}
static void Test(MethodDelegate canshu)
{
  canshu();
}
static void M1()
{
  Console.WriteLine("这个是M1方法");  
}
static void M2()
{
  Console.WriteLine("这个是M2方法");  
}
}
----------------------------
2.委托的作用就是:可以在某个代码内部,嵌入一段外部代码。相当于:注入
-------------------------------
一般在调用委托钱,或者是在触发时间前,都要判断一下委托变量或者是事件是否为null,如果不为null,在调用,如果为null,则不调用
----------------------
3.什么时候用到委托
自定义的控件中的事件会大量使用到委托
即写事件的时候会用到委托。
4.匿名方法
1 不带参数
 MethodDelegate myMethod=delegate()
{
  Cosole.WriteLine("匿名方法");
};
2 带参数
 MethodDelegate myMethod=delegate(string name)
{
  Cosole.WriteLine(name);
};
myMethod("zdp");
 
二.多播委托
=====================================
1.就是一个委托可以调用多个方法
----------------------------------
public delegate void MyDelegate();
MyDelegate m=M1();
m+=M2;
m+=M3;
m();
 
 
static void M1()
{
 Console.WriteLine("M1方法");
}
static void M2()
{
 Console.WriteLine("M2方法");
}
 
static void M3()
{
 Console.WriteLine("M3方法");
}
-------------------------------------
 
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包
--------------------------------------
2 程序集包含:类型元数据,程序集元数据,IL代码,资源文件(元数据就是描述自己的数据)
-----------------------------------
一.加载指定的程序集,并且获取该程序集中的所有类型
-----------------------------
1.加载c:\TestLib.dll 程序集
//现在asm就是TestLib.dll 程序集
Assembly asm=Assembly.LoadFile(@"c:\TestLib.dll");
2.获取asm这个程序集中的所有类型
//获取所有类型,包含public类型与非public类型
//Type[] types=asm.GetTypes();
 
//获取程序中的所有的public类型
Type[] types=asm.GetExportedTypes();
 
foreach(Type typeItem in types)
{
 
 Console.WriteLine(typeItem.Name);
}
Console.ReadKey();
--------------------------------------
二 加载程序集,获取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();
 
-----------------------------
获取SayHi方法
MethodInfo  method =typeClass1.GetMethods("SayHi");
创建一个Class类型的对象
obgect obj=Activator.CreateInstance(typeClass1);
调用该方法
method.Invoke(obj,null);//由于SayHi方法没有参数,所以第二个参数传递一个null
 
----------------------------
foreach(MethodInfo methodItem in minfos)
{
 Console.WriteLine(methodItem.Name);
}
Console.ReadKey();

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ---------------------- 详细请查看:http://edu.csdn.net

黑马程序员-- .net基础加强8之委托,事件,程序集的更多相关文章

  1. 黑马程序员+SQL基础(上)

    黑马程序员+SQL基础 ---------------<a href="http://edu.csdn.net"target="blank">ASP ...

  2. 黑马程序员+Winform基础(上)

    黑马程序员+Winform基础 ---------------<a href="http://edu.csdn.net"target="blank"> ...

  3. 黑马程序员Java基础班+就业班课程笔记全发布(持续更新)

    正在黑马学习,整理了一些课程知识点和比较重要的内容分享给大家,也是给自己拓宽一些视野,仅供大家交流学习,大家有什么更好的内容可以发给我 ,现有黑马教程2000G  QQ 1481135711 这是我总 ...

  4. 黑马程序员_Java基础:网络编程总结

    ------- android培训.java培训.期待与您交流! ---------- Java语言是在网络环境下诞生的,它是第一个完全融入网络的语言,虽然不能说它是对支持网络编程做得最好的语言,但是 ...

  5. 黑马程序员----java基础笔记中(毕向东)

    <p>------<a href="http://www.itheima.com" target="blank">Java培训.Andr ...

  6. 黑马程序员_Java基础组成

    Java语言基础组成 2.1关键字 main不是关键字,但被JVM所识别的名称. 关键字的定义和特点 定义:被Java语言赋予了特殊含义的单词. 特点:关键字中所有字母都为小写. 用于定义数据类型的关 ...

  7. 黑马程序员_Java基础视频-深入浅出精华版--PPT 文件列表

    \day01\code\第一章_Java概述.ppt;\day01\resource\资料\50道编程题(有精力的同学看看).doc;\day01\resource\资料\Sun_Java程序员认证考 ...

  8. 黑马程序员——JAVA基础之泛型和通配符

    ------- android培训.java培训.期待与您交流! ---------- 泛型:            JDK1.5版本以后出现新特性.用于解决安全问题,是一个类型安全机制. 泛型好处: ...

  9. 黑马程序员——JAVA基础之简述面向对象,类,变量,匿名对象

    ------- android培训.java培训.期待与您交流! ---------- 面向对象: 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程 强调的是功能行为 面向对象 将 ...

随机推荐

  1. .NET中的标识符、关键字 以及 .NET中的命名规范

    1.关键字 C#定义了一些关键字(public/static/void/class/int/string),这些关键字是构成C#基本语法用的. VS中蓝色字的才是关键字. Main.String.Co ...

  2. 【风马一族_Android】适合你 --- 大概的描述

    适合你:专注于解决毕业生,离校所遗留的闲置教材的去向问题的一款APP. 目前的现状:毕业生的闲置教材,被清理宿舍的阿姨.大叔所清理到垃圾场,或拿到收破烂的地方,卖掉. 在毕业季中,存在的闲置物品不只有 ...

  3. 取代file_get_contents 的一个采集函数

    function url_get_content($url=''){ $ch = curl_init(); $timeout = 100; $browser = 'Mozilla/5.0 (Windo ...

  4. asp.net图片上传实例

    网站后台都需要有上传图片的功能,下面的例子就是实现有关图片上传. 缺点:图片上传到本服务器上,不适合大量图片上传. 第一.图片上传,代码如下: xxx.aspx 复制代码代码如下: <td cl ...

  5. hexo-github 博客搭建

    安装nodejs 从官网下载系统对应的源码 wget -qO- https://raw.githubusercontent.com/creationix/nvm/master/install.sh | ...

  6. eclipse安装pydev插件

    打开Eclipse,找到Help菜单栏,进入Install New Software…选项. 点击work with:输入框的旁边点击Add…,Name可以随便输入,Location是http://p ...

  7. Linux挂载60T存储

    操作系统: CentOS 6.3 存储:总大小为72T,并划分成3个块,每块20T 安装多实例MySQL数据库,不想挂载3个块,弄成一个大的比较方便管理,个人比较懒. 配置多路径:http://blo ...

  8. 终于成为博客员的一员了,这是我的第一篇博文,写一个关于ul li内容宽度的问题和解决方案

    第一次写博文,写一个刚才遇到的问题吧. 关于ul li文字长度不固定,一行显示多列.当指定宽度时,文字长度超过指定的li宽度时解决方案: 如下代码 <h4>发送对象(共10个会员)< ...

  9. ios项目绕过证书访问https程序

    如果是单个的webview或者request请求,在请求的文件h中直接实现NSURLConnectionDelegate,并在m中添加下列实现下列两个方法: - (BOOL)connection:(N ...

  10. 帝国cms刷洗内容页提示.phome_ecms_news_data_' doesn't exist

    帝国cms后台刷新提示.phome_ecms_news_data_' doesn't exist解决方法: 刷新所有信息内容页面时提示“Table '*.phome_ecms_article_data ...