c#基础--委托

今天又复习了一下委托的知识,并在园子里找了个不错的小例子练习了一下,做如下整理--

首先,委托和类是一个级别的,其声明方式如下:

public delegate int DelegateDemo(int a,int b);

  该委托的定义就决定了:实例化该委托时,接收的方法参数必须满足--方法返回值为int,方法有两个整型参数。

*委托就是----我们把一批具有相同特征的方法,通过建立与具有同样相同特征的委托的一个实例来进行传递,以使其它地方能对这些方法进行调用。即把方法当作参数进行传递

使用:

1>简单的回调函数

public delegate void DelA();//定义委托

public void ShowMG()//定义方法
{
console.writeline("委托练习");
}

DelA() d=new DelA(ShowMG);//声明委托实例,并传递方法参数

d();//方法回调,输出:委托练习

2>委托链

之前方法的基础上定义如下方法:
public void ShowNum()
{
Console.WriteLine("又一个方法");
}

d+=new DelA(ShowNum);//此时委托对象d中依次传入了ShowMG,ShowNum方法

d();//依次调用ShowMG,ShowNum方法

3.小练习--通过下边小练习,本人体会到委托的一大用处:当几个方法的大部分处理逻辑相同,只有小部分逻辑不同时,可以把这一小部分逻辑抽离出来,分别定义方法,然后定义一个委托放在整个方法的改变之处,并封装成一个方法,这样,调用哪个方法,就把哪个方法传入委托就可以了--说的有些乱,看代码变很清楚了(例子非原创,觉得不错于是借鉴来整理下):

需求:textBox内输入一串数字,','连接,'升序排列','降序排列'按钮实现数字顺序的调整:

//1.定义一个委托,比较两个数的大小
public delegate bool CompareDel(int n1,int n2);

//2.两个方法(经过抽离,只有如下逻辑不同)
        //比较大数
        public bool GetLager(int n1,int n2)
        {
            return n1 > n2;
        }

        //比较小数
        public bool GetSmaller(int n1, int n2)
        {
            return !GetLager(n1,n2);
        }    

//整个排序方法如下:(其中比较逻辑已由委托代替)
        public string GetResult(CompareDel del)
        {
            int temp;
            string result = "";
            int[] nums = GetArray();
            for (int i = 0; i < nums.Length - 1; i++)
            {
                for (int j = i + 1; j < nums.Length; j++)
                {
                    if (del(nums[i], nums[j]))
                    {
                        temp = nums[i];
                        nums[i] = nums[j];
                        nums[j] = temp;
                    }
                }
            }
            foreach (var item in nums)
            {
                result += item + ",";
            }
            return result.Substring(0, result.Length - 1);
        }

//字符串数组转整型数组
        public int[] GetArray()
        {
            string[] strs = this.txtInput.Text.Split(',');
            int[] num = new int[strs.Length];
            for (int i = 0; i < strs.Length; i++)
            {
                num[i] = int.Parse(strs[i]);
            }
            return num;
        }

//两个按钮方法调用
     //升序排列
        protected void btnSmaller_Click(object sender, EventArgs e)
        {
            CompareClass c = new CompareClass();
            CompareDel d = new CompareDel(c.GetLager);
            this.lbShow.Text = GetResult(d);
        }

        
        //降序排列
        protected void btnLager_Click(object sender, EventArgs e)
        {
            CompareClass c = new CompareClass();
            CompareDel d = new CompareDel(c.GetSmaller);
            this.lbShow.Text = GetResult(d);
        }



    

从这个小例子中,不难体会出委托的作用--

原文地址:https://www.cnblogs.com/baweier2013/p/3391327.html