刀尖向下弧形刀叫什么:.net 中的委托(delegate)的使用和原理
来源:百度文库 编辑:中财网 时间:2024/04/29 20:08:22
.net中的委托,我个人认为很类似于C++ 中的函数指针。你定义一个代理,然后注册函数到这个代理中即可使用。通过下面的例子来讲解.net中委托的使用 using System;using System.IO;using System.Windows.Forms;class Set{private Object[] items;//构造器。给对象数组进行初始化public Set(Int32 numItems){items = new Object[numItems];for(Int32 i = 0; i < numItems; i++){items[i] = i;}}//定义一个FeedBack委托类public delegate void FeedBack(Object value, Int32 item; Int32 numItems);public void ProcessItems(FeedBack feedback){for(Int32 i = 0; i < items.Length; items++){if(feedback!=null){//如果指定有回调函数,则调用它们feedback(items[item]; item + 1; items.Length);}}}}//定义一个应用类来应用委托class App{public static void main(){StaticCallBack();InstanceCallBack();}public static void StaticCallBack(){//设定含有5个Object的Set对象Set setOfItem = new Set[5];//处理items元素,但不给任何反馈setOfItem.ProcessItems(null); -----------1Console.WriteLine();//处理items元素,并将反馈输出到控制台上setOfItem.ProcessItems(new Set.FeedBack(App.FeedBackToConsole));//注册代理---2Console.WriteLine();//处理items元素,并将反馈输出到消息框上setOfItem.ProcessItems(new Set.FeedBack(App.FeedBackToMsgBox));//注册代理 ---3Console.WriteLine();//处理items元素,并将反馈同时输出到控制台和消息框中FeedBack fb = null;fb += new Set.FeedBack(App.FeedBackToConsole);fb += new Set.FeedBack(App.FeedBackToMsgBox);setOfItems.ProcessItems(fb); --------4Console.WriteLine();}static void FeedBackToConsole(Object value, Int32 item; Int32 numItems){Console.WriteLine(String.Format("Processing item{0} of {1}:{2}",item, numItems, value));}static void FeedBackToConsole(Object value, Int32 item; Int32 numItems){MessageBox.Show(String.Format("Processing item{0} of {1}:{2}",item, numItems, value));}static void InstanceCallBack(){//设定含有5个Object的Set对象Set setOfItem = new Set[5];//处理items元素,并将反馈输出到一个文件中App appobj = new App();setOfItems.ProcessItem(new Set.FeedBack(appobj.FeedBackToFile)); -------5Console.WriteLine();}public void FeedBackToFile(Object value, Int32 item; Int32 numItems){StreamWriter sw = new StreamWriter("status",true);sw.WriteLine(String.Format("Processing item{0} of {1}:{2}",item, numItems, value));sw.Close();}}在上面的程序中,包括5此对FeedBack委托的使用,也就是调用Set类的ProcessItem静态方法。第一次ProcessItem的参数为空,表示不使用委托。第二次调用ProcessItem方法时,它首先构造了一个新的Set.FeedBack委托对象(至于这个对象的具体东西,会在后面有解释)。在将FeedBackToConsole方法作为参数传递给FeedBack构造器,并将返回值作为ProcessItem的参数传递过去。第三次调用和第二次差不多,只是调用的函数不同罢了。第四次调用为我们展示了怎样把委托对象链接成一个委托链。C#中的+= 操作符用来把委托对象追加到fb引用的委托对象链表上。第五次调用的不同之处在于,传递的方法是一个实例方法而不是一个静态方法。下面我们来揭开委托神秘的面纱:再类看一遍下面这行代码:public delegate void FeedBack(Object value, Int32 item; Int32 numItems);当编译器遇到这行代码时,它会产生如下面所示的一个完整的类定义;public class FeedBack : MulticastDelegate{//构造器public FeedBack(Object target, Int32 methodPtr);//下面的方法和源代码中指定的原型相同public void virtual Invoke(Object value, Int32 item; Int32 numItems);//下面两个方法允许我们对委托进行异步回调public virtual IAsyncResult BeginInvoke(Object value, Int32 item; Int32 numItems ,AsyncCallback callback, Object object);public virtual void EndInvoke(IAsyncResult result);}我们只关注构造器和Invoke方法。构造器方法中的target存放的是方法对象的引用,如App.FeedBackToFile中的App,methodPtr存放的是一个特殊的标志方法的Int32值。这些就可以准确的标识一个方法。Invoke方法会被自动调用。
求: .net中delegate 的用法
delegate fee的中文是什么意思?
谁能用最简单的方法解释C#.Net 中的委托?
C#.net 事件与委托
网络管理中的委托代理
.Net中的
Delegate是什么,举例说明!
委托加工的定义
委托的近义词
三国志10的委托
股票委托的问题
股票的委托时间
委托贷款的问题
c#.net 中的DIsposable接口的理解?
ASP.NET中的DataGrid控件的使用
为什么 .NET 中的找不到指定的模块
关于ASP.NET 中的,IFRAME的问题
研究养老保险基金投资管理中的委托代理问题的意义
股票委托交易中的成本价是买和卖的手续费加起来吗?
委托买卖股票,委托价格可以跨天生效么?(比如股票现在1块,我委托1.1卖出,但是今天的价格没有涨到!)
.NET中什么是托管、委托、装配、布署呀?
委托代销中的委托代理人职能是什么?
翻译分析委托样品中的铅含量
自考有用吗?我考的是网络技术?(委托)