C#委托

来源:互联网 发布:otsu算法 opencv 编辑:程序博客网 时间:2024/06/06 14:10

概念:

委托是一个类(方法类),它定义了方法类型,使得可以将被委托方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。

1)使用关键字delegate进行委托的申明: 

public delegate int MyDelegate(int x, int y); 

2)委托的签名(由返回类型和参数组成)和被委托的方法签名要一致,与委托的签名匹配的任何可访问类或结构中的任何方法都可以分配给该委托。

3)创建被委托的方法(与委托相同签名):

//创建与委托相同签名的方法(被委托方法)public static int Adding(int m, int n){      return m + n;}

4)创建委托对象并使之与特定方法(被委托方法)关联:

MyDelegate  md = new  MyDelegate(MyClass.Adding);//或:MyDelegate md=MyClass.Adding;  //C#2.0//或用匿名方法:MyDelegate md=delegate(int m,int n){return m+n;}  //C#2.0+//或使用 Lambda表达式:MyDelegate md=(int m,int n)=>{return m+n};
4)调用:
md(1,2);

完整示例:

namespace com.test{    //申明委托    public delegate int MyDelegate(int x, int y);    public partial class WebForm1 : System.Web.UI.Page    {        //创建与委托相同签名的方法(被委托方法)        public static int adding(int m, int n)        {            return m + n;        }        protected void Page_Load(object sender, EventArgs e)        {            //实例化委托,关联被委托方法            MyDelegate md1=new MyDelegate(adding);            //调用            show.InnerHtml = md1(1, 1).ToString();            //实例化委托,关联被委托方法,C#2.0            MyDelegate md2 = adding;            //调用            show2.InnerHtml = md2(2, 2).ToString();            //实例化委托,关联被委托方法(使用匿名方法),C#2.0+            MyDelegate md3 = delegate(int m, int n) { return m + n; };            //调用            show3.InnerHtml = md3(3, 3).ToString();            //实例化委托,关联被委托方法(使用Lambda表达式),C#3.0+            MyDelegate md4 = (int m, int n) => { return m + n; };            //调用            show4.InnerHtml = md4(4, 4).ToString();        }    }}