这个还是看msdn吧!如果你不理解什么是后期绑定,最好先查一查这个概念。这是一个比较常用的概念,是说在你不确定一个方法的签名(所有参数类型、返回值)的情况下,写出根据情况灵活调用不同方法签名的方法的代码,这个时候就要用到后期绑定代码。
解决方案 »
- 如何比较当前月份和表里的最大月份
- 正则表达式怎么分割这样的字符串
- 小女子请教各位大哥,如何在GridView中绑定下拉列表??
- .net的程序集到底怎么用?这个共享程序集到底是怎么一回事?
- 未将对象引用设置到对象的实例,高手指点一下,谢谢了。
- 如何实现插件和主程序的通信?(在线等,帮顶有分)
- 急...挥泪简单问题大放分!
- 如何实现移动到Label范围内就弹出窗口,离开Label窗口就消失??
- 请教~~如何直接向打印机直接输出字符和直线?
- 200分想和大家讨论一个问题:为什么有些人会说搞数据库开发只是表面的东西,技术含量不高,真正的程序员要做底层开发。
- 存储过程问题
- 请问在.net 安装盘里面有 Visual SourceSafe的安装盘吗
{
class Program
{
delegate void Hello(); static void Main(string[] args)
{
Hello proc = Test1;
proc += Test2;
proc();
Console.ReadKey();
} private static void Test1()
{
Console.WriteLine("Test1");
} private static void Test2()
{
Console.WriteLine("Test2");
}
}
}
这里为委托的实例proc就放入了两个方法,这样就可以吧proc当做一个变量传递给需要委托的过程,直接运行proc这个委托就调用了Test1、Test3两个方法。你还可以为这个proc变量放入更多的方法,至少可以放入6万个以上。基于上面的知识,再按照我们常见的写法调用委托(或者触发事件),我们调用它,它会自动去遍历所有方法。如果有返回值,其实它只是返回最后一个方法返回值(这样如果我们需要累积等等处理就无法实现了),并且如果有某个方法异常就会直接抛出异常而不会继续执行后边要执行的方法。其实,Delegate提供了“散列”执行方法的手段,我们可以自己去精细地控制:using System;namespace ConsoleApplication1
{
class Program
{
delegate void Hello(); static void Main(string[] args)
{
Hello proc = Test1;
proc += Test2;
//proc();
var errcount = 0;
foreach (Hello x in proc.GetInvocationList())
try
{
x();
}
catch
{
errcount++;
}
Console.WriteLine("调用所有方法,其中有{0}个异常。", errcount);
Console.ReadKey();
} private static void Test1()
{
Console.WriteLine("Test1");
throw new Exception("haha");
} private static void Test2()
{
Console.WriteLine("Test2");
}
}
}
这里我演示了我们可以自己手动去调用proc中的各个方法,并精细地控制每一个方法。
它的参数类型是:System.Object[],传递给当前委托所表示的方法的对象数组。
在调用DynamicInvoke时,它会从内部保证传递的参数与回调方法期望的参数兼容。如果兼容,就调用回调方法;如果不兼容,就会抛出一个ArgumentException异常。