深入理解C#委托delegate的使用

目录
  • 1.什么是委托
  • 2:委托的实现
    • 命名法委托
      • 静态方法的实例化委托
      • 实例化方法的委托
    • 多播委托
    • 匿名委托
  • 什么时候适用委托

1.什么是委托

委托就是委托某个方法来实现具体的功能,类似于:甲方委托乙方去实现需求;出租房屋人委托中介为其出租房屋。

委托是一种引用类型,从数据结构上来讲:委托和类一样,都是一直用户自定义类型。

2:委托的实现

委托是对方法的抽象和封装。委托对象实质上代表了方法的引用(即内存地址)他存储的就是一系列具有相同签名和返回类型的方法的地址

可以理解为函数的一个包装,它使得c#中的函数可以作为参数来被传递

使用时遵循三步走原则:定义委托、实例化委托,调用委托

调用委托时,委托包含的方法将被执行

委托有三种方法:命名方法委托、多播委托、匿名委托

命名法委托

1:定义委托

修饰符 delegate 返回值类型 委托名 {参数列表}

public delegate void FirstDelegate ();

静态方法的实例化委托

2:实例化委托

委托名 委托对象名=new 委托名{方法名}

FirstDelegate firstDelegate=new FirstDelegate(Test.First);

委托的方法可以是静态方法的名称,也可以是实例化方法的名称

方法:

public class Test
{

     public static void First()
     {
         Console.WriteLine("第一次实现静态方法类的委托");
     }
}

3:调用

firstDelegate();

实例化方法的委托

2:实例化委托

委托名 委托对象名=new 委托名{方法名}

FirstDelegate firstDelegate=new FirstDelegate(new Test().First);

委托的方法可以是静态方法的名称,也可以是实例化方法的名称

方法:

public class Test
{

     public  void First()
     {
         Console.WriteLine("第一次实现实例化方法类的委托");
     }
}

3:调用

firstDelegate();

多播委托

多播委托就是一个委托中注册多个方法,在注册方法时可以在委托中通过加号或则减号来实现添加或者撤销的方法。

例如 我想买饭吃 又想和奶茶 还想吃蛋糕,我委托一个人完不成,我需要委托三个人帮我完成,例如美团

1:定义委托

public class problem
{
     public delegate void BuyDelegate();
 
 
     static void mian()
     {
         BuyDelegate buyDelegate=new BuyDelegate(Buy.BuyFood);
         buyDelegate+=Buy.BuyCake;
         buyDelegate+=Buy.BuyTea;
 
         buyDelegate();
     }
}
 
public class Buy
{
    public void BuyFood()
    {
      Conssole.WriyeLine("买个螺狮粉");
    }
    public void BuyCake()
     {
      Conssole.WriyeLine("买个蛋糕");
 
    }
    public void BuyTea()
    {
       Conssole.WriyeLine("买杯奶茶");
    }
 
  
}

匿名委托

匿名委托就是 使用匿名的方法注册在委托上 ,实际上就是委托中通过定义代码块来实现委拖的作用

1:定义委托

修饰符 delegate 返回值类型 委托名(参数列表)

2:实例化委托

委托名 委托对象=delegate

  代码块; 
};

3:调用匿名委托

委托对象(参数列表);

1:实现水果买卖

public class program
{
    public delegate void BuyFruit(double price,double count)

    static void main(string[] arg)
    {

        BuyFurit buyFruit=delegate
        {
           Console.WriteLine("水果总价为"+price*count);
        };
        buyFruit(3,5);
    }

}

什么时候适用委托

1:委托相当于用方法作为另一方法参数,同时,也可以实现在两个不能直接调用的方法中做桥梁,如在多线程中的跨线程的方法调用就得用委托。

2:委托使得一个方法可以作为另一个方法的参数进行传递,这就是委托最大的作用。使用委托可以将同类型的方法绑定到同一个变量上,当调用此变量时就可以一次调用绑定的方法,很方便。

到此这篇关于深入理解C#委托delegate的使用的文章就介绍到这了,更多相关C#委托delegate内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C#中的委托delegate用法的示例详解

    C#中的委托 委托和事件在 .NET Framework 中的应用非常广泛,然而,较好地理解委托和事件对很多接触 C# 时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里堵得慌,浑身不自在.本章中,我将由浅入深地讲述什么是委托.为什么要使用委托.事件的由来..NET Framework 中的委托和事件.委托中方法异常和超时的处理.委托与异步编程.委托和事件对Observer 设计模式的意义,对它们的编译代码也做了讨论. 1.

  • C#委托delegate实例解析

    所谓c#的委托就是说把函数当参数来传递. 这个在js完全就用不着搞什么委托东西,直接转就是了.而对于C#来说则不是这样! 一个函数,如果它的参数是函数,那么是这样子写的 : public void method(Action<string, Int32> voidMethod, Func<string, Int32> returnMethod) Action<string, Int32> voidMethod 意思是说这个将被传进来的函数是一个没有return的函数,就

  • C#中委托(Delegates)的使用方法详解

    1. 委托是什么? 其实,我一直思考如何讲解委托,才能把委托说得更透彻.说实话,每个人都委托都有不同的见解,因为看问题的角度不同.个人认为,可以从以下2点来理解: (1) 从数据结构来讲,委托是和类一样是一种用户自定义类型. (2) 从设计模式来讲,委托(类)提供了方法(对象)的抽象. 既然委托是一种类型,那么它存储的是什么数据? 我们知道,委托是方法的抽象,它存储的就是一系列具有相同签名和返回回类型的方法的地址.调用委托的时候,委托包含的所有方法将被执行. 2. 委托类型的定义 委托是类型,就

  • C#中的委托Delegate

    一.概述 委托为引用类型 二.使用 1.声明委托类型,定义委托 public delegate void HandlerDelegate(string message); 2.声明委托变量 HandlerDelegate myDelegate;//声明委托变量 3.实例化委托,带函数引用 传统方式 //myDelegate = new HandlerDelegate(Method1);//可以为静态方法或者实例方法. //或者直接myDelegate = Method1; 方法定义: publi

  • C#中的delegate委托类型基本学习教程

    委托 delegate 是表示对具有特定参数列表和返回类型的方法的引用的类型.在实例化委托时,你可以将其实例与任何具有兼容签名和返回类型的方法相关联.你可以通过委托实例调用方法. 委托用于将方法作为参数传递给其他方法.事件处理程序就是通过委托调用的方法.你可以创建一个自定义方法,当发生特定事件时,某个类(如 Windows 控件)就可以调用你的方法.下面的示例演示了一个委托声明: public delegate int PerformCalculation(int x, int y); 可将任何

  • 浅析C# 委托(Delegate)

    C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针.委托(Delegate) 是存有对某个方法的引用的一种引用类型变量.引用可在运行时被改变. 委托(Delegate)特别用于实现事件和回调方法.所有的委托(Delegate)都派生自 System.Delegate 类. 声明委托(Delegate) 委托声明决定了可由该委托引用的方法.委托可指向一个与其具有相同标签的方法. 例如,假设有一个委托: public delegate int MyDelegate (string

  • C# 委托(delegate) 的小例子

    代码如下: 复制代码 代码如下: static void Main(string[] args)        {           Console.WriteLine(Exec(GetSet));           Console.ReadKey();        }        //定义委托,用于将方法做为参数传给Exec.        public delegate string GetResultDelegate();        public static string G

  • 深入理解C#委托delegate的使用

    目录 1.什么是委托 2:委托的实现 命名法委托 静态方法的实例化委托 实例化方法的委托 多播委托 匿名委托 什么时候适用委托 1.什么是委托 委托就是委托某个方法来实现具体的功能,类似于:甲方委托乙方去实现需求:出租房屋人委托中介为其出租房屋. 委托是一种引用类型,从数据结构上来讲:委托和类一样,都是一直用户自定义类型. 2:委托的实现 委托是对方法的抽象和封装.委托对象实质上代表了方法的引用(即内存地址)他存储的就是一系列具有相同签名和返回类型的方法的地址 可以理解为函数的一个包装,它使得c

  • 解析.Net 4.0 中委托delegate的使用详解

    .Net中的委托从功能上讲和c语言或者c++中的方法指针类似,可以像调用方法一样调用委托完成某个功能,或返回某类结果.但是.Net毕竟是更高级的语言,委托Delegate也更高级了,委托是一种数据接口,它包含调用目标和调用方法的指针:而在.Net中定义的委托都继承自MulticastDelegate即多播委托,所谓的多播委托是指可以包含多个调用方法的委托.一. 先来看下委托的定义:如下C#代码定义委托public delegate void DoSomething(int times);委托的定

  • javascript委托(Delegate)blur和focus用法实例分析

    本文实例讲述了javascript委托(Delegate)blur和focus用法.分享给大家供大家参考.具体分析如下: Opera (9.5b) 对于所有的focus和blur事件,不能正确的触发两次: 因此,focus和blur事件的处理函数可以被委派到事件的捕获阶段. 例子1(列表类): 复制代码 代码如下: <ol id="列表">   <li><a href="#">列表项1</a>     <ol&g

  • C#使用委托(delegate)实现在两个form之间传递数据的方法

    本文实例讲述了C#使用委托(delegate)实现在两个form之间传递数据的方法.分享给大家供大家参考.具体分析如下: 关于Delegate[代理.委托]是C#中一个非常重要的概念,向前可以推演到C++的指针,向后可以延续到匿名方法.lambda表达式. 现在我就从一个最简单最实用的一个小例子出发分析一下Delegate的使用. 现在有两个窗体Form1和Form2. 两个按钮Button1(Form)和Button2(Form2). Form1的代码: private void button

  • C# 事件的设计与使用深入理解

    相关概念 定义:事件是用于通知其他对象发生了本对象发生了特定的事情的类型成员. 说明:事件是.NET类型成员中相对较为难以理解和实践的一个成员,因为事件的定义不是继承自基础的数据类型,而是对委托(delegate)的封装.所以,在了解事件之前,你需要先了解一点委托. 应用场景:事件的应用场景非常广泛,其中最常见的场景是在各个前端控件中的大量触发事件设计.原因是因为 意义:事件成员的使用有利于在程序中对面向对象原则的实现.例如类型的单一职责原则,控制反转原则.设想如果前端控件不能抽象出大量丰富的事

  • c# 委托的本质是什么

    引言 上一个专题已经和大家分享了我理解的--C#中为什么需要委托,专题中简单介绍了下委托是什么以及委托简单的应用的,在这个专题中将对委托做进一步的介绍的,本专题主要对委本质和委托链进行讨论. 一.委托的本质 平时我们很容易使用委托--用C# delegate关键字定义委托,再用new操作符构造委托实例,然后通过调用委托实例来调用回调方法(就是用一个了委托对象的变量来代替方法名,这句话如果刚接触的人不好理解的话,这里给个例子:MyDelegate mydelegate =new Mydelegat

  • C#中委托的基础入门与实现方法

    目录 前言 关于委托 委托的实现 一.基本实现方式 二.使用委托时的一些特殊方式 1.委托实例对象的创建多元化: 2.事件绑定的多种方式 三.委托的几种特殊实现方式 1,使用Action方法 2,使用Func方法 四.委托的一些特殊小知识 1.委托闭包的产生 2,关于事件 总结 前言 似乎委托对于C#而言是一种高级属性,但是我依旧希望你就算第一次看我的文章,也能有很大的收获. 所以本博客的语言描述尽量简单易懂,知识点也是面向初入门对于委托不了解的学习者的.当然如果有幸有大佬发现文章的错误点,也欢

随机推荐