C#中对委托的理解和使用

.Net中要把方法作为参数传递给其它方法时,需要用委托来实现。即委托是.Net中用来进行方法寻址的。类似C++中的函数指针。C++中函数指针是非类型安全的,仅仅指向的是内存位置。并没有定义具体的参数类型、返回类型。.Net中的委托是类型安全的,委托定义了参数类型和返回类型。
委托在.Net中是一种特殊类型的对象,对象中包含了一个或者多个方法的地址。也有人说委托是方法的容器。委托常用在方法回调、事件调用上。委托(Delegate)都派生自System.Delegate类。委托使用包括委托声明和委托实例化。
一、委托的声明
委托的声明类似于变量的声明:
public delegate int MyDelegate ( int i, int j);
public为范围定义,delegate为委托的关键字,int 为返回参数的类型,MyDelegate为委托的名称,括号中的两个int为传入的参数。
在定义委托时必须给出返回参数、传入参数的类型。委托可以定义在类的内部、也可以定义在类的外部,可以通过public、private、protected定义访问范围。
委托的声明语法:
delegate  <return type> <delegate-name> <parameter list>
二、委托实例化和使用
委托声明后需要通过new关键字进行实例化。实例化时需要把委托指向的方法传递给委托,这里的方法只需要方法名称,不需要方法参数。如:
MyDelegate myDelegate = new MyDelegate(AddNum);

AddNum为传入的方法名称。完整代码:

class Program
    {
        public delegate int MyDelegate(int i, int j);
        static void Main(string[] args)
        {
            MyDelegate myDelegate = new MyDelegate(AddNum);
            int sum=myDelegate(3,5);
            Console.WriteLine(sum.ToString());
        }
        private static int AddNum(int i,int j)
        {
            return i + j;
        }
     
    }
}
三、多路广播委托
委托可以包含一个或者多个方法地址,绑定多个方法地址时,可以同时调用多个方法。
绑定多个方法:
委托实例+=方法名称
取消绑定:
委托实例-=方法名称
广播示例:
 class Program
    {
        public delegate int MyDelegate(int i, int j);
        static void Main(string[] args)
        {
            MyDelegate myDelegate = new MyDelegate(AddNum);
            myDelegate += MultiNum;
            int sum=myDelegate(3,5);
            Console.WriteLine(sum.ToString());
        }
        private static int AddNum(int i,int j)
        {
            return i + j;
        }
        private static int MultiNum(int i,int j)
        {
            return i * j;
        }
     
    }
}


猜你喜欢

转载自blog.csdn.net/mpegfour/article/details/79391383