c#中的委托是什么事件是不是一种委托,c#中的委托和多线程,C#中的委托Delegate

c#中的委托是什么事件是不是一种委托,c#中的委托和多线程,C#中的委托Delegate

这篇文章介绍了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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 设计一个简单的C#控制台应用程序,C#控制台程序,C# 创建控制台应用程序
  • 深入解析windows第8版,深入解析C#(第4版)
  • 数组代码,c# 数组操作,C# 数组实例介绍(图文)
  • 学会C#要多久,学会c#要多久,c#学习之30分钟学会XAML
  • 回溯法01背包问题c,回溯法求解01背包问题伪代码,C#使用回溯法解决背包问题实例分析
  • xml文件转义字符,xml转意字符,C# XML中的转义字符操作
  • winform 进度条控件,c# 进度条使用
  • winform 进度条控件,c# 进度条使用,C#使用winform实现进度条效果
  • winform backgroundworker,c# isbackground
  • winform backgroundworker,c# isbackground,C# BackgroundWorker用法详解
  • lua与c#交互,lua c#
  • lua与c#交互,lua c#,ToLua框架下C#与Lua代码的互调操作
  • linq c#,linq原理 c#
  • linq c#,linq原理 c#,c#中LINQ的基本用法实例
  • java decimal保留两位小数,sql中decimal函数保留2位小数,C#中decimal保留2位有效小数的实现方法
  • 留言与评论(共有 条评论)
       
    验证码: