委托代码案例

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;
        }
    }
}
原文地址:https://www.cnblogs.com/yxcn/p/12980977.html