C# 委托1:委托类型的概念、定义和调用

下方例子来源于B站UP主SunnieShine的C#专栏第48讲,个人觉得讲的非常好。

//参考冒泡排序,如果想设计一个对字符串的冒泡排序该怎么处理?如下:

namespace ConsoleIdeaTest
{
    public delegate int Comparison(string left, string right); //声明委托类型,写着像方法,实际是类
    //delegate是声明委托类型的专用修饰符,Comparison是委托类型名
    //注意委托类型的变量数量、类型一定要和要在委托实例中想委托的方法一致
    class Program
    {
        static void Main(string[] args)
        {
            string[] arr = { };
            Comparison comparisonMethod = new Comparison(Compare);//委托类型的实例调用compare方法,注意此处是直接把方法名当变量来传递了
            //委托的实例调用的方法Compare就叫回调函数
            //本例中声明的委托类型需要两个string,而我们声明的具体的比较方法就是需要两个string

            Order.Sort(arr, comparisonMethod);//冒泡排序方法第二个参数需要委托类型的实例,在第42行声明的
            foreach (string i in arr)
            {
                Console.WriteLine("{0},",i);
            }
        }
        static int Compare(string a, string b) //被调用方法的变量类型、数量与委托类型需要一致
        {
            if (a.Length > b.Length)
                return 1;
            else if(a.Length < b.Length)
                return -1;

            for (int i = 0; i < a.Length; i++)
            {
                if (a[i] > b[i])
                    return 1;
                else if (a[i] < b[i])
                    return -1;
            }
            return 0;
        }
    }
    class Order
    {
        public static void Sort(string[] array, Comparison comparison) 
        {
            for (int i = 0; i < array.Length - 1; i++)
            {
                for (int j = 0; j < array.Length - 1 - i; j++)
                {   //下面的if语句,表面上是调用comparison,实际上在主函数的变量中实例回调了Compare去对比array[j]和array[j+1]
                    if (comparison.Invoke(array[j], array[j + 1]) >= 0)  //Invoke是“调用”的意思,也可以理解成“回调”,可以省略掉。
                    {
                        string temp = array[j];
                        array[j] = array[j + 1];
                        array[j + 1] = temp;
                    }
                }
            }
        }
    }
}

        上述代码是举例说明委托的用法之一:回调函数。

        实际上如果不像上述代码中一下设计,个人觉得也可以Sort方法需要第二个参数bool,然后在主函数中定义变量让其接受Compare返回的bool值,再用该变量来传入Sort方法做第二个参数。但整理逻辑就会比上述代码的写法更麻烦,而且上述方法也只是最简单的应用,后续学习的内容会更需要委托。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值