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;
            }
        }
    }
  • 相关阅读:
    windows命令行下导入excel数据到SQLite数据库
    Android Studio如何提示函数用法
    在不root手机的情况上读取Data目录上的文件
    OSI七层模型
    设计模式之代理模式
    Android中Javascript中的调用
    cf #205 B Codeforces Round #205 (Div. 2) B. Two Heaps
    uva 10600 次小生成树
    防2B && 图论模板 && 7788
    最大匹配 && 最佳完美匹配 模板
  • 原文地址:https://www.cnblogs.com/yxcn/p/12980977.html
Copyright © 2011-2022 走看看