<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="C#委托delegate(代理)" id="card1">
<p> 游客</p><p>
标题:C#委托delegate(代理)<br/>
正文:<br/>
C# 代理实际上类似于C++中的函数指针,因为C#中不存在指针,所以用代理可以完成一些原来在C++中用函数指针完成的操作,例如传递一个类A的方法m给另一个类B的对象，使得类B的对象能够调用这个方法m。但与函数指针相比，delegate有许多函数指针不具备的优点。首先，函数指针只能指向静态函数，而delegate既可以引用静态函数，又可以引用非静态成员函数。在引用非静态成员函数时，delegate不但保存了对此函数入口指针的引用，而且还保存了调用此函数的类实例的引用。其次，与函数指针相比，delegate是面向对象、类型安全、可靠的受控（managed）对象。也就是说，runtime能够保证delegate指向一个有效的方法，你无须担心delegate会指向无效地址或者越界地址。<br/><br/>    实现一个delegate是很简单的，通过以下3个步骤即可实现一个delegate：<br/>1．声明一个delegate对象，它应当与你想要传递的方法具有相同的参数和返回值类型。<br/>    声明一个代理的例子：<br/>    public delegate int MyDelegate(string message);<br/><br/>2．创建delegate对象，并将你想要传递的函数作为参数传入。<br/>     创建代理对象的方法：<br/>    1). MyDelegate myDelegate = new MyDelegate(实例名.方法名);<br/>    2). MyDelegate myDelegate = new MyDelegate(类名.方法名);<br/>注：如果需要代理的方法是一个static静态方法的话，采用第2种方式，否则采用第1种方式。<br/><br/>3．在要实现异步调用的地方，通过上一步创建的对象来调用方法。<br/>    可以直接使用代理调用代理所指向的方法:<br/>    myDe<br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=289&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=289&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=289&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=289&amp;Page=3">[3]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=289&amp;Page=14">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=289">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=289">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>