zoukankan      html  css  js  c++  java
  • C#委托

    委托(delegate)是一种存储函数引用的类型。在事件和事件处理时有重要的用途。

    栗子:

    定义一个委托:

    //定义一个计算的委托,返回值和参数都是整数
    private delegate int Calculation(int x, int y);

    委托的定义类似于函数,但不带函数体,且必须要使用delegate关键字。委托的定义指定了一个返回类型和一个参数列表。

    定义了委托后,就可以声明该委托的变量。

    接着把这个变量初始化为与委托具有相同返回类型和参数列表的函数引用。

    栗子:

    定义两个方法,一个计算两个数相加,一个计算两个数相减:

    using System;
    
    namespace MyConsoleApp
    {
        internal class Program
        {
            //定义一个计算的委托,返回值和参数都是整数
            private delegate int Calculation(int x, int y);
    
            private static void Main()
            {
                Calculation calculation;
                const int x = 10, y = 5;
                if (DateTime.Now.Second % 2 == 0)
                {
                    // 如果当前的秒数是偶数则执行两个数相加
                    calculation = Plus;
                }
                else
                {
                    // 否则,执行两个数相减
                    calculation = Reduce;
                }
                Console.WriteLine(calculation(x, y));
            }
            /// <summary>
            /// 计算两个数相加
            /// </summary>
            /// <param name="x"></param>
            /// <param name="y"></param>
            /// <returns></returns>
            private static int Plus(int x, int y)
            {
                return x + y;
            }
    
            private static int Reduce(int x, int y)
            {
                return x - y;
            }
        }
    }

    将方法作为参数引用到另一个方法:

    using System;
    
    namespace MyConsoleApp
    {
        internal class Program
        {
            //定义一个计算的委托,返回值和参数都是整数
            private delegate int Calculation(int x, int y);
    
            private static void Main()
            {
                const int x = 10, y = 5;
                if (DateTime.Now.Second % 2 == 0)
                {
                    // 如果当前的秒数是偶数则执行两个数相加
                    Console.WriteLine($"x + y = {Execute(Plus, x, y)}");
                }
                else
                {
                    // 否则,执行两个数相减
                    Console.WriteLine($"x - y = {Execute(Reduce, x, y)}");
                }
            }
            /// <summary>
            /// 计算两个数相加
            /// </summary>
            /// <param name="x"></param>
            /// <param name="y"></param>
            /// <returns></returns>
            private static int Plus(int x, int y)
            {
                return x + y;
            }
    
            private static int Reduce(int x, int y)
            {
                return x - y;
            }
            private static int Execute(Calculation calculation, int x, int y)
            {
                return calculation(10, 5);
            }
        }
    }
  • 相关阅读:
    JUC 1
    给定一个随机数生成器randm(),获得randn()
    堆与优先队列
    集合与映射
    二分搜索树
    链表
    栈与队列
    PostgreSQL ALTER TABLE 命令
    postgresql修改自增序列
    SQL 删除重复行,只保留一条记录
  • 原文地址:https://www.cnblogs.com/gme5/p/11798934.html
Copyright © 2011-2022 走看看