学习
实践
活动
专区
工具
TVP
写文章

C# 委托

一、前言:每次看到委托和事件,心理面总是不自在,原因大家都懂,但是委托和事件在.NET FrameWork里面的应用非常的广泛,所以熟练的掌握委托和事件对一个.NET开发人员来说是十分重要的,所以花半天的时间来彻底的扫下盲点 //定义了一个无返回值,参数为name的委托 //注意委托定义的位置和string,delegate,SayHello2的位置是一样的,说明委托也应该是个类型,或者说类 //但是委托的声明方式 总结: <1>委托是一个类,任何可以声明类的地方,都可以声明委托. <2>委托可以定义方法的类型和返回值 <3>通过使用委托,将方法作为参数传递给方法的方式,减少了程序中if else和switch语句出现的次数 ,增加了程序的可扩展性 2、委托也是一种数据类型 (1)、上面的代码中提到了,可以定义类的地方,就可以定义委托,那么我们就可以推断出,委托实际上也是一种数据类型,我们也可以像申明类一样的方式来申明委托. (2)、将多个方法绑定给同一个委托 这是委托的一个特性:可以将多个方法赋给同一个委托,或者将多个方法绑定给同一个委托,当调用这个委托的时候,讲一次吊用该委托所绑定的方法;代码如下: using System

39980

C#委托二(委托类型)

我们都应该清楚,在使用委托之前,先要定义一个委托类型,如下所示: delegate int MyDelegate(int a,int b); MyDelegate md =null; 既然叫做委托类型, 就说明MyDelegate实际上是一个类,上面的写法只是一种简单的缩略写法,实际上,我们自己定义的委托,都是继承自System.MulticastDelegate类的. ? MultiDelegate类当中可以包括一个委托的链表,这个表中,可以包括一个或多个元素(每个元素都是一个委托),我们可以将这个表称为调用链。 关于多播委托的说明,我们会在后面的内容中进行讲解。 Invoke方法 为了解释Invoke方法,我们先来回顾一下,当一个委托指向了一个方法时是如何调用的,代码如下所示: int c = this.md(a,b); 我们在调用委托,并执行该委托所指向的方法时

15910
  • 广告
    关闭

    热门业务场景教学

    个人网站、项目部署、开发环境、游戏服务器、图床、渲染训练等免费搭建教程,多款云服务器20元起。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C# 委托一(委托基础)

    委托可以这样来理解:它是一种数据类型,和引用类型类似,不过和一般的类相比,委托的实例不是在堆中的数据,而是一个方法。 委托类似于引用类型,和C++中的函数指针很相似,但是不同之处就在于,它不是存在于堆中的。正是有了委托我们才得以将函数打包成一个变量进行传递。 实例结束,总结以下几点: Ø 在C#中,所有的委托都是从System.MulticastDelegate类派生的。 Ø 委托隐含具有sealed属性,即不能用来派生新的类型。 Ø 委托最大的作用就是为类的事件绑定事件处理程序。 Ø 在通过委托调用函数前,必须先检查委托是否为空(null),若非空,才能调用函数。 Ø 在委托实例中可以封装静态的方法也可以封装实例方法。 Ø 在创建委托实例时,需要传递将要映射的方法或其他委托实例以指明委托将要封装的函数原型(.NET中称为方法签名:signature)。

    24040

    C#委托

    C#中的委托关键字是 Delegate,委托类似于C/C++中函数的指针。是存有对某个方法引用的引用类型变量,可在运行时被改变。一般用于实现事件和回调方法。 注意:所有的委托都派生自 System.Delegate 类 委托分为 委托类型 和 委托实例 ,下面分别进行讲解。 零、委托类型和委托实例 1.委托类型 委托类型定义了委托实例可以调用的方法、方法的返回类型和参数。我们可以通过委托类型的返回类型和参数来得知具体可以调用哪种方法。 如果多播委托的返回类型不是void,那么调用者只能获取到最后一个被调用方法的返回值,前面方法的返回值将会被抛弃。 c#会将 +、-、+=、-=编译为 Combine 和 Remove两个方法。 二、实例方法委托和静态方法委托 实例方法和静态方法都是c#中经常用到的方法,我们可以将这两种方法都赋值给委托,因此就出现了实例方法稳妥和静态方法委托

    22920

    C# 委托基础

    不知不觉,又开始委托的学习了,感觉这个东西我能学一辈子,哈哈哈!这次看的是官方的参考书(C#高编9),每次看不同的资料,总能学到不同的知识!言归正传 1、为什么要使用委托? 举个例子:在C#中,可以告诉计算机并行执行某些新的执行序列,同时运行当前任务,这个序列就称之为线程,如果要告诉计算机启动一个新的线程,就必须告诉线程入口方法在哪里,并告诉计算机开始启动方法的细节,所以线程 ,委托实现为派生自System.MulticastDelegate抽象类的类,System.MulticastDelegate又派生字System.Delegate,C#编译器能识别这个类,会使用其委托语法 ,当然还有其他的如:BeginInvoke()等,这里不做解释,如想要了解,请参考C# 委托进阶 6、多播委托 上面的实例中,我给一个委托绑定了多个方法,如果要多次调用这些方法,就需要显示多次吊用。 我们把一个委托,如果这个委托绑定了多个方法,称为多播委托,如果调用多播委托,就可以按顺序连续吊用多个方法。为此,委托的签名必须返回void,否则就只能得到最后一个方法的返回值。

    32650

    C#委托11111

    C#中的委托关键字是 Delegate,委托类似于C/C++中函数的指针。是存有对某个方法引用的引用类型变量,可在运行时被改变。一般用于实现事件和回调方法。 注意:所有的委托都派生自 System.Delegate 类 委托分为 委托类型 和 委托实例 ,下面分别进行讲解。 零、委托类型和委托实例 委托类型 委托类型定义了委托实例可以调用的方法、方法的返回类型和参数。我们可以通过委托类型的返回类型和参数来得知具体可以调用哪种方法。 如果多播委托的返回类型不是void,那么调用者只能获取到最后一个被调用方法的返回值,前面方法的返回值将会被抛弃。 c#会将 +、-、+=、-=编译为 Combine 和 Remove两个方法。 二、实例方法委托和静态方法委托 实例方法和静态方法都是c#中经常用到的方法,我们可以将这两种方法都赋值给委托,因此就出现了实例方法稳妥和静态方法委托

    7620

    C# 委托进阶

    尽管并非必须,但是大多数情况委托定义的返回值都为void,因为这部分委托基本都是需要绑定多个方法,也就是当前委托允许多个订阅者注册,但是当主函数执行委托对象上注册的方法时,不会返回结果,只会返回最后一个方法的结果值 NumberChanged被声明为私有的,所以客户端无法看到它,所以无法通过它来触发事件,调用订阅者的方法,而只能通过Register()和UnRegister()方法来注册和取消注册 但是上面的代码并不是最好的实现,C# 提供事件访问器,也可以实现上面的功能 3、事件访问器 C#提供事件访问器,通过它可以将委托封装成一个变量,像访问类中的属性那样,来访问事件,代码如下: using System; using System.Collections.Generic ,适用于所有类型的委托。 我们都知道委托实际上是一种数据结构,当每定义一个委托,实际上这个委托实例都会继承自MulticastDelegate这个完整的类,而MulticastDelegate这个类则会继承Delegate数据结构

    34960

    C#学习笔记 委托

    定义委托 有时候可能想要将一个方法传递给另一个方法。在C++中使用函数指针来实现,在JavaScript中由于函数也是对象所以直接可以在参数列表中传递。而在C#中需要使用委托。 创建委托需要一个方法签名与定义委托时候一样的方法。在创建委托的时候还可以用简化的语法。 如果每次都手动创建一个新委托显得不那么方便。因此就有了Action< T>委托和Func< T>委托。 Action< T>委托表示一个void返回类型的方法。 b运算的结果是:{op(a, b)}"); } 多播委托 上面的委托都是一个委托只包含了一个方法,其实委托还可以包含多个方法。 这时候称为多播委托。这时候,委托内部会保存一个迭代方法列表。

    9210

    C#委托与事件

    Delegate ----   C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。 委托特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 System.Delegate 类。 ----   可以将多个方法赋给同一个委托,或者叫将多个方法绑定到同一个委托,当调用这个委托的时候,将依次调用其所绑定的方法。 委托对象可使用 "+=" 运算符进行合并。只有相同类型的委托可被合并。"-=" 运算符可用于从合并的委托中移除组件委托。 自定义事件 ----   C#中的事件处理实际上是一种具有特殊签名的delegate,象下面这个样子: public delegate void MyEventHandler(object sender

    63260

    C#各种委托介绍

    委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。事件是一种特殊的委托。 Action Action 是无返回值的泛型委托。 Action 表示无参,无返回值的委托。 Action<int,string> 表示有传入参数 int,string 无返回值的委托。 ,而不用显式声明自定义的委托。 封装的方法必须与此委托定义的方法签名相对应。 也就是说,封装的方法必须具有四个均通过值传递给它的参数,并且不能返回值。 (在 C# 中,该方法必须返回 void)通常,这种方法用于执行某个操作。 三、委托的特点 委托类似于 C++ 函数指针,但它们是类型安全的。 委托允许将方法作为参数进行传递。 委托可用于定义回调方法。 委托可以链接在一起;例如,可以对一个事件调用多个方法。

    25810

    C#委托和事件

    在.NET时代,函数指针有了更安全更优雅的包装,就是委托。而事件,则是为了限制委托灵活性引入的新“委托”(之所以为什么限制,后面会谈到)。同样,熟练掌握委托和事件,也是C#登堂入室的标志。 事件和委托这么好,可是当你写了很多代码,完成大型系统时,心里是不是总觉得怪怪的?有当年使用指针时类似的感觉?    当代码的层次复杂时,开放委托和事件是不是会带来更大的麻烦?       列下这些问题,下面就让我们讨论这些”尖酸刻薄“的问题。 二. 2.用这个方法生成新的委托,这个委托同时有一个内部的私有字段_target指向这个实例。 本文介绍了C#委托和事件的订阅和取消订阅,并在匿名函数和多线程两个环境下讨论了一些问题。如果你觉得这篇文章对你有帮助,请点一下推荐,若有任何问题,欢迎留言讨论,共同学习。

    26320

    c#委托和事件

    一:委托简介 委托是一种指针,保持方法的引用 委托使得方法可以作为参数进行传递 如: public delegate void MyDelegate(); class Program MyDelegate a = SayHellow; a(); Console.ReadKey(); } } 委托其实是一种特殊的类 他定义了方法的签名 使得与该签名相同的方法都能被此委托所引用 有了这个特性就可以把方法当作参数进行传递 二:匿名方法 委托可以不用已存在的方法创建 如 public delegate void }; a(); Console.ReadKey(); } } 匿名方法在lambda表达式出来之后,更见锋芒,以后再说 委托可以绑定匿名方法 ,实例方法和静态方法 三:多播委托 委托支持操作符重载 可以将多个方法绑定到同一个委托 也可以从一个委托移除某一方法 可以把一个方法绑定多次,运行时也会执行多次 如 public delegate

    9010

    C#委托+回调详解

    今天写不完,明天会接着写的,,,, 学习C#有一段时间了,不过C#委托+回调才这两天才会用,以前只是知道怎么用.前面的一篇文章,函数指针,其实是为这个做铺垫的,说白了委托就相当于C语言中的函数指针,具体说用委托有什么好处 ,我也不知道,但是因为你只要学C#那么回调就一定要会,回调是委托的一种.回调多用于线程间....还是用代码一点点的说明吧! 现在认为自己以前不会用委托是因为手太懒,再者没有太多的必须用C#做的Demo,自己学东西都是用到什么学什么,想做什么东西需要什么知识就学什么,前几天有了必须要做的C#的Demo,关于检测TCP通信发过来的数据的 是关键字,意味着定义了一个委托------你说函数指针也行,,C#啊;;;淡化了指针的概念 然后 a b= new a(c);//实例化2222222222222222222 不知道有没有不知道为何实例化的 是C#整的名词对象 如果不知道对象那么知道类吗?

    2.7K40

    关注

    腾讯云开发者公众号
    10元无门槛代金券
    洞察腾讯核心技术
    剖析业界实践案例
    腾讯云开发者公众号二维码

    相关产品

    • 腾讯云代码分析

      腾讯云代码分析

      腾讯云代码分析(TCAP),用心关注每行代码迭代、助您传承卓越代码文化!精准跟踪管理代码分析发现的代码质量缺陷、代码规范、代码安全漏洞、无效代码,以及度量代码复杂度、重复代码、代码统计。

    相关资讯

    热门标签

    活动推荐

    扫码关注腾讯云开发者

    领取腾讯云代金券