委托示例

    冒泡排序法我们都很熟悉,但是这种方法对于int类型很适合,如果我需要比较的对象类型不是int型怎么办呢?这个时候就可以考虑使用委托,他将方法作为参数,具体参数的类型要延迟到客户端才来实现,可以看下面的代码,用来比较公司每一位员工的薪水。

 

// 声明委托,将对象x和y进行比较
// 这里声明的委托Comparison将两个对象进行比较
delegate bool Comparison (object x , object y );

class BubbleSorter
{
    public static void Sort (object [] SortArray , Comparison comparision )// 使用委托作参数,因为不知道要比较的类型
    {
        for (int i = 0 ; i < SortArray . Length ; i ++)
        {
            for (int j = i + 1 ; j < SortArray . Length ; j ++)
            {
                if (comparision (SortArray [ i ], SortArray [ j ])) // 如果第一个小于第二个,return true
                {
                    // 将两个数进行兑换,这样较大的数放在了前面
                    object temp = SortArray [ i ];
                    SortArray [ i ]= SortArray [ j ];
                    SortArray [ j ]= temp ;
                }
            }
        }
    }
}

class Employee
{
    private string name ;
    private decimal salary ;

    public Employee (string name , decimal salary )
    {
        this . name = name ;
        this . salary = salary ;
    }

    // 重载ToString()方法
    public override string ToString ()
    {
        return string . Format ("{0},{1:C}" , name , salary );
    }

    // 比较两个对象的薪水,并返回他们的比较结果,结果为布尔类型
    // 可以看到,这个函数的返回类型和传入的参数于委托类型相同,因此可以使用委托掉用此方法
    public static bool CompareSalary (object x , object y )
    {
        Employee e1 = (Employee )x ;
        Employee e2 = (Employee )y ;
        return (e1 . salary < e2 . salary );
    }
}

class Program
{
    static void Main ()
    {
        Employee [] employees =
        {
            new Employee ("zhangsan" , 1000 ),
            new Employee ("lisi" , 5000 ),
            new Employee ("desheng" , 10000000000000000000 ),
            new Employee ("wangwu" , 3004 )
        };
       
        // 静态方法直接调用
        BubbleSorter . Sort (employees , Employee . CompareSalary );

        foreach (var employee in employees )
        {
            Console . WriteLine (employee );
        }

        Console . ReadKey ();
    }
}


    从上面的代码 看到,委托的优势在于它的灵活,客户机代码知道类中传递的是什么方法,封装这个方法就可以进行比较。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值