//委托使用的演示 class Program { //1.使用delegate关键字来定义一个委托类型 public delegate void MyDelegate(int para1, int para2); static void Main(string[] args) { //2.声明委托变量d MyDelegate d; //3.实例化委托类型,传递的方法也可以为静态方法,这里传递的是实例方法 d = new MyDelegate(new Program().Add); //4.委托类型作为参数传递给另一个方法 MyMethod(d); Console.ReadKey(); } void Add(int para1,int para2) { int sum = para1 + para2; Console.WriteLine("两个数的和为:" + sum); } private static void MyMethod(MyDelegate mydelegate) { //5.在方法中调用委托 mydelegate(1, 2); } }
从以上代码可以看出,使用委托的步骤为:定义委托类型—声明委托变量—实例化委托—作为参数传递给方法—调用委托。如下具体分析委托的使用过程。
(1)定义委托类型: public delegate void MyDelegate(int para1, int para2);。其定义方式类似于方法的定义,只是多了一个delegate关键字。
(2)声明委托变量:MyDelegate d;既然委托是一种类型,那么可以使用委托来声明一个委托变量,相当于int a;
(3)实例化委托: d = new MyDelegate(new Program().Add);。第二步只是声明了委托变量,但并没有将它实例化。类的实例化使用new关键字来实现,而委托也属于类类型,所以委托的实例化也使用new关键字来进行的。这里需要注意的是,委托的实例化是用一个方法名(不能带左右括号)作为参数,并且该方法的定义必须符合委托的定义,即该方法的返回类型、参数个数和类型必须与委托定义中的一样。这样,前面3步就好比构造了一个律师对象,而方法InstanceMethod好比是当事人的方法。
(4)作为参数传递给方法:MyMethod(d);。委托使用得在C#中,可以把一个方法作为另一个方法的参数,而委托可以看作是一个包装方法的对象。
(5)在方法中调用委托。MyMethod(d);。委托使用得在c#中,可以把一个方法作为另一个方法的参数,而委托可以看作是一个包装方法的对象。
总结:在使用委托时,需要注意以下几个问题。
1.在第三步中,被传递的方法的定义必须与委托定义相同,即方法的返回类型和参数个数、参数类型都必须与委托相同。并且,传递的是方法名,方法名后不能带有左右括号。
2.在第五步中,委托的调用与方法调用类似,传递的实参类型和个数必须与委托定义一致。
3.由于委托是方法的包装类型,所以对委托的调用也就是对其所包装的的方法的调用,上面第5步时间上是调用了Add方法来对传入的实参进行计算。