其实,恐怕大家在看完(一)之后便已经在心中产生了一个呼之欲出的想法——委托就是函数指针!最初,我也曾有过这样的想法,只是并未在相应的文献资料中找到支撑。然而这是后话,是当我自己对于委托的理解到达可以写得出第一篇随笔之后才可能有的见解。因此,先前的几篇虽名为《我眼中委托的真正面貌》,实则是我自己对于委托的一个探索过程,因此,我以委托常见且较有代表性的几个用法来组织文章的脉络。个人感觉,对于一个未知的对象,这样一个由浅入深的过程其实是很有必要的。至少,我希望可以帮那些和我一样对于委托并不是太了解的朋友们少走一些弯路。
不过,想法归想法,我说过暂时没有找到相应的理论支撑。因此,我仍然以探索的态度来阐述自己的一些观点,欢迎大家批评指正,同时希望已经完全摸透委托机制的高人们不吝赐教。
前不久一个偶然的机会搜到了这样一篇文章:
从函数指针到代理(C#代理入门)
作者是木头象朋友。他在文中为我们阐述了这样的观点:委托是函数指针功能的扩展。
其实,个人感觉这句话阐明的观点还是有一定的道理的,感兴趣的朋友们可以支持一下木头象朋友的帖子。这个观点究竟正确与否,我们姑且不论。然而,我们却可以以此为论题,来探讨一下委托比之函数指针究竟有哪些功能上的扩展。
C#中要了解一个对象自身的一些特质其实很简单,我们甚至无需依赖于MSDN,你只需声明相应的对象,在此之后点一个“.”,C#编译器的智能感知功能便会自动列出这个对象的相关属性及其方法的一些简单描述。
我们用一个实例化的委托对象进行如上操作,便可大致了解委托对象的一些特有的方法和属性了。这里我们讨论几个关键方法的使用方法:
9.异步委托的实现
using System.Threading;
namespace AsyncDelegate
{
class Program
{
//定义委托
delegate void MyDelegate();
static void Main(string[] args)
{
//声明委托对象
MyDelegate ObjDelegate = new MyDelegate(ObjDelegateFun);
//使用异步方式
IAsyncResult ObjIr = ObjDelegate.BeginInvoke(null,null);
Console.WriteLine("委托方法执行中.");
Thread.Sleep(5000);
ObjDelegate.EndInvoke(ObjIr);
Console.ReadLine();
}
static private void ObjDelegateFun()
{
Thread.Sleep(5000);
Console.WriteLine("委托方法调用成功!");
}
}
}