zoukankan      html  css  js  c++  java
  • 委托代码案例

    1.委托的定义

    C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。

    委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 System.Delegate 类。

    namespace DeldgateTest
    {
        public class Program
        {
            /*
             * 1.声明一个委托
             * 此声明决定了可由该委托引用的方法。
             * eg:此委托可被用于引用任何一个带有单一int类型参数,返回int类型变量的方法
             */
            public delegate int MyDeletage(int s);
            public static int number = 10;
            public static void Main(string[] args)
            {
                /*
                 * 3.创建委托对象
                 * 委托对象必须使用new关键字来创建,且与一个特定方法有关;
                 * 当创建委托对象时,传递到new语句的参数就像方法调用一样书写,但不带参数
                 */
                MyDeletage md1 = new MyDeletage(AddNumber);
                MyDeletage md2 = new MyDeletage(SubNumber);
                /*
                 4.使用委托对象调用方法
                 */
                md1(10);
                Console.WriteLine("number is " + GetNumber()); //15
                md2(5);
                Console.WriteLine("number is " + GetNumber()); //20
            }
    
            /*
             * 2.定义一个入参及出参都与委托MyDeletage一致的函数
             */
            public static int AddNumber(int a)
            {
                number = number + a;
                return number;
            }
    
            public static int SubNumber(int b)
            {
                number = number - b;
                return number;
            }
    
            public static int GetNumber()
            {
                return number;
            }
        }
    }

    2.委托的多播

    委托对象可使用 "+" 运算符进行合并。一个合并委托调用它所合并的两个委托。只有相同类型的委托可被合并。"-" 运算符可用于从合并的委托中移除组件委托。

    使用委托的这个有用的特点,您可以创建一个委托被调用时要调用的方法的调用列表。这被称为委托的 多播(multicasting),也叫组播。

    namespace DeldgateTest
    {
        public class Program
        {
            public delegate int MyDeletage(int s);
            public static int number = 10;
            public static void Main(string[] args)
            {
                //定义一个委托对象
                MyDeletage md;
                MyDeletage md1 = new MyDeletage(AddNumber);
                MyDeletage md2 = new MyDeletage(SubNumber);
                //加入第一个委托对象
                md = md1;
                //加入第二个委托对象
                md += md2;
                //调用多播
                md(10);
                Console.WriteLine("number is " + GetNumber()); //10
                Console.ReadKey();
            }
    
            public static int AddNumber(int a)
            {
                number = number + a;
                return number;
            }
    
            public static int SubNumber(int b)
            {
                number = number - b;
                return number;
            }
    
            public static int GetNumber()
            {
                return number;
            }
        }
    }
  • 相关阅读:
    java客户端集成RocketMq
    java8常见流式操作
    Spring源码架构以及编译
    Rocket消息存储原理
    由二叉树中序和先序遍历求二叉树的结构
    10.14重写ENqUEUE和DEQUEUE,使之能处理队列的下溢和上溢。
    10.12 说明如何用一个数组A[1..n]来实现两个栈,使得两个栈中的元素总数不到n时,两者都不会发生上溢,注意PUSH和POP操作的时间应为O(1)。
    用类模板实现对任何类型的数据进行堆栈进行存取操作。
    java struts2+urlrewrite 配置404错误
    c++ sizeof 及别名定义2种示例
  • 原文地址:https://www.cnblogs.com/yxcn/p/12980977.html
Copyright © 2011-2022 走看看