zoukankan      html  css  js  c++  java
  • C#中的delegate

    C#中的delegate

    如果你有C++的编程背景,那这个问题就很简单了:C#中的delegate和C++中的函数指针基本是一回事,C#正是以delegate的形式实现了函数指针。不同的地方在于C#中delegate是类型安全的。

        如果没有C或者C++的背景知识也没有一点关系。
        要理解Delegate,首先,你要明白,它是一个类,他和Class是一个级别的概念,不同在于Class的定义包含字段和方法,而delegate只包含方法的细节。

         定义Delegate:
         public delegate bool CompareDelegate(int a, int b);

    上面语句的含义是:定义了一个委托的实例时,这些实例都要包含一个方法名,并且这个方法必须有两个int型的参数,并且必须返回一个bool型的值。
        好,现在就创建一个上面定义的委托的实例
        public CompareDelegate myCompare = new CompareDelegate(CompareMethod);
    里面的这个CompareMethod是一个方法:
    定义如下:
          public static bool CompareMethod(int x , int y)
          {
              bool result = x > y ? true : false;
              return result;
          }
    怎么使用呢
                int a = 10;
                int b = 15;
                bool isBigger = myDelegate(a, b);

    下面是完整的代码:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using Common;

    namespace ConsoleApplication8
    {
        //定义委托
       public delegate bool CompareDelegate(int a, int b);
        public class MyCompare
        {
           /// <summary>
           /// 定义一个方法,符合上面定义的委托所要求的方法细节,返回值为bool型,两个参数分别为int型
           /// </summary>
           /// <param name="x"></param>
           /// <param name="y"></param>
           /// <returns></returns>
          public static bool CompareMethod(int x , int y)
          {
              bool result = x > y ? true : false;
              return result;
          }

        }
        class Program
        {
          
            static void Main(string[] args)
            {
                //实例化委托并初始化。注意初始化时候,必须包含一个方法的名称,而且这个方法必须符合最初定义委托时候的签名(参数类型和返回值)
                CompareDelegate myDelegate = new CompareDelegate(MyCompare.CompareMethod);
                //现在我们使用委托实例来比较两个数a和b的的大小
                int a = 10;
                int b = 15;
                bool isBigger = myDelegate(a, b);
                Console.WriteLine(" a > b ?: " + isBigger);
                Console.Read();
            }
        }
    }

    是不是太简单了。


        C#中委托用来干什么呢,当然不是用来实现象上面那样的弱智程序。在C#中一提委托,一般就会引出另外一个术语:事件。C#中事件的实现,正是依赖于delegate。而事件又是一个很重要的概念,只有真正理解了委托,才能打好基础,真正的弄明白事件。

  • 相关阅读:
    ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 18. 基于Claim和Policy的授权 下
    ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 17. 基于Claim和Policy的授权 上
    ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 16. 角色管理
    ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 15. 用户管理
    ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 14. ASP.NET Core Identity 入门
    ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 13. 安装前端库
    ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 12. Views 下
    ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 11. Views 上
    ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 10. 使用EF Core
    ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 09. Model验证
  • 原文地址:https://www.cnblogs.com/netserver/p/1593402.html
Copyright © 2011-2022 走看看