C# Delegate implement

本文深入探讨了C#中委托的概念及其应用,特别关注如何使用委托实现多线程异步编程。通过实例展示了如何定义不同类型的委托、如何实例化并调用这些委托,以及在实际场景中如何利用委托进行异步操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

delegate声明

1. delegate
public delegate int MethodName(intx, int y);
最多32个参数

2. Action
Action是返回值的泛型委托
2.1 Action 表示无参,无返回值的委托
2.2 Action<int,string> 表示传入参数int,string 无返回值委托
最多16个参数

3. Func
Func是有返回值的泛型委托
3.1 Func<int> 表示无参返回值为int的委托
3.2 Func<object,string,int> 表示传入参数为object,string 返回值为int的委托
最多16个参数,必须要有返回值

4. predicate
predicate是返回bool型的泛型委托
4.1 predicate<int> 表示传入参数为int 返回值为bool的委托
只能必须也只能有一个传入参数,返回值固定为bool

实例化delegate

例:

delegate void Callback(String message);
class DelegateTest
{
//
public void printMsg(String msg, Callback callback, AsyncCallback asynCallback, String asynParams)
{
Console.WriteLine(msg);
// callback(msg); //同步执行
IAsyncResult ar= callback.BeginInvoke(msg, asynCallback, asynParams);//异步执行,会新建一个线程操作

//WaitHandle waitHandle= ar.AsyncWaitHandle;
//waitHandle.WaitOne(); //同步等待返回, 但只等待callback委托,并不包括asynCallback

Console.WriteLine("it's finished");
Console.ReadKey();

}
public static void Main(String[] args)
{
DelegateTest t = new DelegateTest();
String externalParams = "external params";
System.Threading.Thread.CurrentThread.Name = "main thread";
System.Threading.Thread.CurrentThread.Priority = ThreadPriority.Lowest;
Callback c = (msg) => {
//System.Threading.Thread.Sleep(3000);

//异步执行测试代码 --begin
System.Threading.Thread.CurrentThread.Name = "sub thread";
System.Threading.Thread.CurrentThread.Priority = ThreadPriority.Highest;
//异步执行测试代码 --end

Console.WriteLine("callback msg:" + msg + ":" + externalParams);

};

AsyncCallback ac = (ar) => {//
Console.WriteLine("incoming param-" + ar.AsyncState.ToString() + ": threadname-" + System.Threading.Thread.CurrentThread.Name);
//System.Threading.Thread.Sleep(5000);

};
t.printMsg("test msg", c, ac, "asyn test message");

Console.WriteLine("main thread end threadname-" + System.Threading.Thread.CurrentThread.Name);


}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值