这篇文章介绍了C#中的委托代表,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
一、概述
委托为引用类型
二、使用
1、声明委托类型,定义委托
公共委托无效处理委托(字符串消息);
2、声明委托变量
HandlerDelegate myDelegate//声明委托变量
3、实例化委托,带函数引用
传统方式
//我的委托=新的处理程序委托(方法1);//可以为静态方法或者实例方法。
//或者直接myDelegate=方法1
方法定义:
公共空的方法1(字符串管理)
{
控制台WriteLine(MGS);
}
或匿名方法方式:
myDelegate=delegate(字符串消息)//实例化委托(带函数引用)
{
控制台WriteLine(消息);
};
或希腊字母的第11个表达式方式:
myDelegate=(message)={ Console .WriteLine(消息);};
4、调用委托
我的代表(“Hello World”);//同步调用
三、高级用法
1、多播委托
公共委托无效处理委托(字符串消息);
void Main()
{
HandlerDelegate myDelegate//声明委托变量
myDelegate=(message)={ Console .WriteLine("a "消息);};
myDelegate=(message)={ Console .WriteLine("b "消息);};
myDelegate=(message)={ Console .WriteLine("c "消息);};
我的代表(“Hello World”);//多个方法依次调用
控制台WriteLine(myDelegate .GetInvocationList().GetLength(0));//3
}
2、作为方法的参数传递委托实例
公共委托无效处理委托(字符串消息);
//客户端
void Main()
{
HandlerDelegate myDelegate//声明委托变量
myDelegate=(消息)=1
{
控制台WriteLine('计算结果为:'消息);
};
我的类我的类=新我的类();
我的班级MethodWithCallback(2,我的委托);
}
//作为服务端,计算完成后,将结果返回给客户端
公共类我的班级
{
带有回调的公共void方法(int a,HandlerDelegate callback)
{
a=a 1;
回调(' result:' a . ToString());//执行委托
}
}
四、同步、异步调用
1、委托的同步调用
委托的引起方法用来同步调用,它将阻塞当前线程,然后执行调用线程,调用完毕后再继续主线程向下执行。
公共委托int AddHandler(int a,int b);
void Main()
{
AddHandler handler=(a,b)=1
{
返回(a b);
};
//int result=handler(2,3);
int结果=处理程序。调用(2,3);//此句调用的方法执行完毕后才执行往下的语句。
控制台。写(结果);//5
}
2、委托的异步调用
把调用放入线程池中,程序主体线程或用户界面线程可同时执行。
公共委托int AddHandler(int a,int b);
void Main()
{
AddHandler handler=(a,b)=1
{
返回(a b);
};
IAsyncResult ar=处理程序BeginInvoke(2,3,null,null);
//while(!ar .IsCompleted)
//{
//控制台WriteLine('做某事'));//在委托的工作未完成之前,主线程可做其他事情。
//}
//或
而(!ar .AsyncWaitHandle。WaitOne(0,false))
{
控制台WriteLine('做某事'));
}
int结果=处理程序100 . endin voke(ar);
控制台。写(结果);//5
}
3、委托的异步回调
公共委托int AddHandler(int a,int b);
void Main()
{
AddHandler handler=(a,b)=1
{
返回(a b);
};
IAsyncResult ar=处理程序BeginInvoke(2,3,new AsyncCallback(AddComplete),null);
控制台WriteLine('做某事'));//异步调用完成时调用此方法。
}
公共void AddComplete(IAsyncResult ar)
{
AddHandler处理器=((异步结果)ar).异步委托作为AddHandler
控制台WriteLine(处理程序end invoke(ar));
}
到此这篇关于C#委托的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。