C#实现的几种委托方式介绍
//普通委托
DeleteShow ds = new DeleteShow(ShowName);
Console.WriteLine("----------------------");
Console.WriteLine("普通委托----请输入用户名:");
string Name = Console.ReadLine();
Console.WriteLine(ds(Name));
Console.WriteLine("----------------------");
//匿名方法委托
DeleteShow ds2 = delegate(string NewName) {
return string.Format("匿名方法委托----输入的用户名为:{0}", NewName);
};
Console.WriteLine("----------------------");
Console.WriteLine("请输入用户名:");
string WriteName = Console.ReadLine();
Console.WriteLine(ds2(WriteName));
Console.WriteLine("----------------------");
//Lambada委托
DeleteShow ds3 = (LamName) => { return string.Format("Lambada委托----输入的用户名为:{0}", LamName); };
Console.WriteLine("----------------------");
Console.WriteLine("请输入用户名:");
string WriteLamName = Console.ReadLine();
Console.WriteLine(ds3(WriteLamName));
Console.WriteLine("----------------------");
相关推荐
-
C# 中如何利用lambda实现委托事件的挂接
委托定义如下: 复制代码 代码如下: public class SocketSp{ public delegate void ReceiveCompleted(byte[] receiveBuffer, int receiveTotalLen,Exception ex); public ReceiveCompleted receiveCompleted;} 挂接方定义如下 复制代码 代码如下: public class LinkOuter{ SocketSp linkOuterSocket =
-
C# 委托的三种调用示例(同步调用 异步调用 异步回调)
首先,通过代码定义一个委托和下面三个示例将要调用的方法: 复制代码 代码如下: public delegate int AddHandler(int a,int b); public class 加法类 { public static int Add(int a, int b) { Console.WriteLine("开始计算:" + a + "+" + b); Thread.Sl
-
对c#中委托的理解
理解委托从一个简单的例子开始 金城武演的有部老电影叫<薰衣草>,里面有个情节大概是这样的:小金收客户的钱,然后代表客户去向不同的人Say I love you. 一开始他的客户都是中国人,只需要说中文,如下代码示例,很简单,支持所有中国客户: 复制代码 代码如下: public class LoveManager{ public void Love(string name) { Console.WriteLine("我爱你, {0}", name)
-
C#用Lambda和委托实现模板方法
1 问题描述查看下面这段代码: 复制代码 代码如下: int[] a = [1,2,3]; for (int i =0; i<a.length; i++) { a[i] = a[i] * 2; } for (int i =0; i<a.length; i++) { Console.WriteLine(a[i]); } 很明显,上述代码中存在for循环的重复代码. 2 解决方案如何消除重复?使用委托. •定义委托 复制代码 代码如下: delegate int mapfun(
-
c#委托把方法当成参数(实例讲解)
静态方法代理: 复制代码 代码如下: public delegate void DoGreeting(string name); class Program { [STAThread] static void Main(string[] args) { //方法名当成参数传给委托类型调用 MarkGreeting("张三", GreetingEnglish); MarkGr
-
C#委托所蕴含的函数指针概念详细解析
原则: 1.函数指针,实际上是函数编码后的指令在内存中的首地址,在C++/C中,这个地址可以用函数名直接使用 一个函数调用另一个函数的时候,就可以把被调用函数以函数指针的形式作为参数传入 2.回调函数callback使用的技术就是函数指针: 回调函数就好像是一个中断处理函数,系统在符合你设定的条件时自动调用.为此,你需要做三件事: 1). 声明: 2). 定义: 3). 设置触发条件,就是在你的函数中把你的回调函数名称转化为地址作为一个参数,以便于DLL调用. 回调函数是应用程序提供给Windo
-
C#匿名委托和Java匿名局部内部类使用方法示例
测试代码 复制代码 代码如下: using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace CSharpStudy{ class Program { static void Main(string[] args) { int i = 0; Action
-
C#中委托的基本用法总结
原则: 1.委托本质就是个指针,一个函数指针,拿到函数的首地址即可: C#的委托加了安全性,体现在对于函数指针所引用的函数指令块的类型检测,比如返回值,参数类型,参数个数 而C中的函数指针被赋值的时候(在C#中,就是委托实例化的时候,因为C#中后台将委托处理成一个类了,封装了哈)被赋予的值是否满足类型的种种条件(返回值,参数类型,参数个数)不做检查,由用户给出保证,C#会编译提示出来 2.委托实例化的过程,也就是委托对象构造的过程,从底层来讲,即将一个现存的函数代码指令块的内存地址(静态函数,实
-
C# 委托(跨窗体操作控件)实例流程讲解
效果描述:有两个窗体,FORM1(一个名为"打开form2"的button控件)和FORM2(一个名为"改变form1颜色"的button控件).启动时,FORM1中点击button控件"打开form2""使FORM2显示出来.点击FORM2中的"改变form1颜色"后,Form1中颜色改变. 一.在Form2里面: 首先声明一个委托和委托实例Form2类外 复制代码 代码如下: public deleg
-
c#委托详解和和示例分享
什么是委托? 委托是寻址方法的.NET版本,使用委托可以将方法作为参数进行传递.委托是一种特殊类型的对象,其特殊之处在于委托中包含的只是一个活多个方法的地址,而不是数据. 委托虽然看起来像是一种类型,但其实定义一个委托,是定义了一个新的类.下面这行代码,定义了一个委托,使用ILDasm.exe查看其生成的IL代码如图所示: 复制代码 代码如下: //定义委托,它定义了可以代表的方法的类型,但其本身却是一个类 public delegate int methodDelegate(string st
-
深入理解C#中常见的委托
一提到委托,浮现在我们脑海中的大概是听的最多的就是类似C++的函数指针吧,呵呵,至少我的第一个反应是这样的.关于委托的定义和使用,已经有诸多的人讲解过,并且讲解细致入微.我就不用多废话了.今天我要说的是C#中的三种委托方式:Func委托,Action委托,Predicate委托以及这三种委托的常见使用场景.Func,Action,Predicate全面解析首先来说明Func委托,通过MSDN我们可以了解到,Func委托有如下的5种类型: 复制代码 代码如下: (1) *delegate TRes
-
c#委托学习示例分享
1.委托 总的来说,委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性.所以,引入委托后,编程人员可以把方法的引用封装在委托对象中,然后把委托对象传递给需要引用方法.调用委托和调用方法的方式是一模一样的,代码如下: a.代码: 复制代码 代码如下: using System;using System.Collections.Generic;usi
-
c#并行任务多种优化方案分享(异步委托)
遇到一个多线程任务优化的问题,现在解决了,分享如下. 假设有四个任务: 任务1:登陆验证(CheckUser) 任务2:验证成功后从Web服务获取数据(GetDataFromWeb) 任务3:验证成功后从数据库获取数据(GetDatFromDb) 任务4:使用2.3的数据执行一个方法 (StartProcess) 一个比较笨的方法(本人最开始的方法,记为方法1)是直接开启一个线程,按照顺序依次执行四个任务: 复制代码 代码如下: new Thread(delegate
-
基于C#委托的深入分析
1.委托的定义 委托可以看成是一种数据类型,可以用于定义变量能接受的值只能是一个方法. 委托简单的示例: 复制代码 代码如下: namespace DelegateDemo { class Program { public delegate int MathOptDelegate(int value1,int value2); public int add(int value1, int value2) {
-
解析C#中委托的同步调用与异步调用(实例详解)
委托的Invoke方法用来进行同步调用.同步调用也可以叫阻塞调用,它将阻塞当前线程,然后执行调用,调用完毕后再继续向下进行.同步调用的例子: 复制代码 代码如下: using System;using System.Threading;public delegate int AddHandler(int a, int b);public class Foo { static void Main() { Console.WriteLine("**********SyncInvokeTest***
-
C#委托初级使用的实例代码
复制代码 代码如下: delegate double ProcessDelegate(double param1, double param2); static double Muliply(double param1, double param2) { return param1 * param2; } static double Divide(double param1, double param2) {
-
深入c# Func委托的详解
如下所示: 复制代码 代码如下: using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Anonymous_Lam{ delegate string ConvertMethod(string Method); class Lambda_Fun { static void Main() { Conver
-
C# 委托(delegate) 的小例子
代码如下: 复制代码 代码如下: static void Main(string[] args) { Console.WriteLine(Exec(GetSet)); Console.ReadKey(); } //定义委托,用于将方法做为参数传给Exec. public delegate string GetResultDelegate(); public static string G
随机推荐
- 详解php中serialize()和unserialize()函数
- ThinkPHP中关联查询实例
- 详解angular 中的自定义指令之详解API
- Windows Server 2016 PHP运行环境安装配置
- 模仿百度红包福袋界面实例代码
- javascript自动改变文字大小和颜色的效果的小例子
- javascript应用:Iframe自适应其加载的内容高度
- php+xml实现在线英文词典查询的方法
- JSP 开发之Spring Boot 动态创建Bean
- Android仿荷包APP启动动画
- JavaScript中使用webuploader实现上传视频功能(demo)
- PHP无刷新上传文件实现代码
- 世界各国及地区纸币 World paper currency
- JavaScript 基础函数_深入剖析变量和作用域
- 谈谈javascript中使用连等赋值操作带来的问题
- Linux中进程和线程的对比与区别
- 最大子矩阵问题实例解析
- asp.net 程序优化精选第1/2页
- 另类的文件上传解决方案
- web前端vue之vuex单独一文件使用方式实例详解