C#中委托的基本用法总结
原则:
1、委托本质就是个指针,一个函数指针,拿到函数的首地址即可;
C#的委托加了安全性,体现在对于函数指针所引用的函数指令块的类型检测,比如返回值,参数类型,参数个数
而C中的函数指针被赋值的时候(在C#中,就是委托实例化的时候,因为C#中后台将委托处理成一个类了,封装了哈)被赋予的值是否满足类型的种种条件(返回值,参数类型,参数个数)不做检查,由用户给出保证,C#会编译提示出来
2、委托实例化的过程,也就是委托对象构造的过程,从底层来讲,即将一个现存的函数代码指令块的内存地址(静态函数,实例的非静态成员函数都行)赋值给这个委托;这个赋值过程,就是委托的构造函数要做的事情,所以,委托的构造函数一定有一个参数,这个参数在后台让系统处理,就是满足类型检查的函数指针,所要检查的类型(返回值,参数类型,参数个数)都是在声明定义委托的时候给出的。
3、委托实例化的两种方法:
1) A a = new A(静态方法名/实例.方法名);
2) A a = 静态方法名/实例.方法名;
委托调用的两种方法:
1)a.Invoke()
2)a()
用来构造委托的方法可以是静态方法,也可以是实例化对象的成员函数,本质是这段代码指令已经编译出来,分配了内存了,传递给委托的参数(本质就是这块指令数据的首地址)是有效的有意义的,从这个角度来理解,自然静态方法,实例方法都能用来构造、建立委托实例的了
相关推荐
-
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#并行任务多种优化方案分享(异步委托)
遇到一个多线程任务优化的问题,现在解决了,分享如下. 假设有四个任务: 任务1:登陆验证(CheckUser) 任务2:验证成功后从Web服务获取数据(GetDataFromWeb) 任务3:验证成功后从数据库获取数据(GetDatFromDb) 任务4:使用2.3的数据执行一个方法 (StartProcess) 一个比较笨的方法(本人最开始的方法,记为方法1)是直接开启一个线程,按照顺序依次执行四个任务: 复制代码 代码如下: new Thread(delegate
-
C#中委托和事件的区别实例解析
本文实例分析了C#中委托和事件的区别,分享给大家供大家参考之用.具体如下: 大致来说,委托是一个类,该类内部维护着一个字段,指向一个方法.事件可以被看作一个委托类型的变量,通过事件注册.取消多个委托或方法.本篇分别通过委托和事件执行多个方法,从中体会两者的区别. 一.通过委托执行方法 class Program { static void Main(string[] args) { Example example = new Example(); example.Go(); Console.Re
-
C#基础之委托用法实例教程
本文以实例形式简单介绍了C#中委托的用法,是深入学习C#程序设计所必须掌握的重要技巧.现以教程形式分享给大家供大家参考之用.具体如下: 首先,委托是C#中最为常见的内容.与类.枚举.结构.接口一样,委托也是一种类型.类是对象的抽象,而委托则可以看成是函数的抽象.一个委托代表了具有相同参数列表和返回值的所有函数.比如: delegate int GetCalculatedValueDelegate(int x, int y); 在上面的定义中,我们定义了一个委托,这个委托代表着一类函数,这些函数的
-
c#委托详解和和示例分享
什么是委托? 委托是寻址方法的.NET版本,使用委托可以将方法作为参数进行传递.委托是一种特殊类型的对象,其特殊之处在于委托中包含的只是一个活多个方法的地址,而不是数据. 委托虽然看起来像是一种类型,但其实定义一个委托,是定义了一个新的类.下面这行代码,定义了一个委托,使用ILDasm.exe查看其生成的IL代码如图所示: 复制代码 代码如下: //定义委托,它定义了可以代表的方法的类型,但其本身却是一个类 public delegate int methodDelegate(string st
-
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#事件处理和委托event delegate实例简述
本文实例讲述了C#事件处理和委托event delegate,分享给大家供大家参考.具体方法如下: 以下仅仅是用最简单的方式表示事件,实际应用可能是不同窗体之间相互通知某些操作,达到触发. 首先声明一个degate的 EventHandler 参数可以没有 一个或多个 但是触发和使用一定要匹配. 创建一个该EvenHandler的实例a 在程序建立或你需要的时候产生一个事件触发申明: a += new EventHandler(d); public delegate void EventHand
-
c#委托学习示例分享
1.委托 总的来说,委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性.所以,引入委托后,编程人员可以把方法的引用封装在委托对象中,然后把委托对象传递给需要引用方法.调用委托和调用方法的方式是一模一样的,代码如下: a.代码: 复制代码 代码如下: using System;using System.Collections.Generic;usi
-
C#基础之泛型委托实例教程
本文实例讲述了C#中泛型委托的用法,并以示例形式较为详细的进行了用法分析.分享给大家供大家参考之用.具体如下: 首先,泛型委托是委托的一种特殊形式,虽然感觉看上去比较怪异,其实在使用的时候跟委托差不多,不过泛型委托更具有类型通用性. 就拿C#里最常见的委托EventHandler打比方.在.NET 2.0以前,也就是泛型出现以前,普通的事件处理函数都由EventHandler定义,如下: public delegate void EventHandler(object sender, Event
-
C#中常见的系统内置委托用法详解
一般来说,C#在公共语言运行时(CLR)环境中系统为我们内置了一些常用的委托,包括Action类的委托.Func类的委托.Predicate<T>委托.Comparison<T>委托等等.以上这些委托的命名空间都是System,所属程序集都是 mscorlib.dll,今天本文就来讲一讲这些委托的使用方法. 就像我们自己已定义好的一样,要实现某些功能,我们可以直接利用系统内置委托,实例化它们,而不必显式定义一个新委托并将命名方法分配给该委托.如: public static voi
-
C#使用委托的步骤浅析
本文浅析了C#使用委托的步骤.分享给大家供大家参考.具体分析如下: 委托可以理解为C或C++里面的函数指针,调用委托其实是调用被委托的方法. 简单的使用委托的步骤如下: 1.定义委托 复制代码 代码如下: // 定义委托使用关键字 delegate private delegate void SetProgressBarValueDelegate(int value); 2.声明委托 复制代码 代码如下: private SetProgressBarValueDelegate setProgre
随机推荐
- C++基于递归算法解决汉诺塔问题与树的遍历功能示例
- perl用变量做句柄介绍
- MYSQL必知必会读书笔记第十和十一章之使用函数处理数据
- AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
- 浅谈javascript对象模型和function对象
- Android编程简单实现九宫格示例
- java多线程编程之向线程传递数据的三种方法
- GridView多层嵌套和折叠与展开(修改适合自己使用)
- JS搜狐面试题分析
- JavaScript数据类型和变量_动力节点Java学院整理
- asp遍历站点所有文件夹的代码
- 基于C语言实现简单的走迷宫游戏
- 更改Mysql数据库存储位置的具体步骤
- php调整gif动画图片尺寸示例代码分享
- jquery插件qrcode在线生成二维码
- JavaScript模拟鼠标右键菜单效果
- SpringMVC+Mysql实例详解(附demo)
- JavaScript(js)设置默认输入焦点(focus)
- 微信小程序 功能函数小结(手机号验证*、密码验证*、获取验证码*)
- Vue 父子组件的数据传递、修改和更新方法