zoukankan      html  css  js  c++  java
  • 委托和事件

    委托就是当方法不知道具体的实现并且不知道具体由哪个对象的方法来实现时,委托可以理解为独特的接口,就是只封装一个方法的接口。需要由别人来实现。

    两者在功能上是一样的!

    区别在于:
    1.委托只是单一的方法,而接口可以封装多个方法
    2.委托只约束方法的签名,而接口约束方法的名称

    所以从多态的角度来将,委托可以认为是轻量级的接口。

    例子1:

    现在我要对一系列数据进行排序,而排序算法可能比较复杂,我不会自己写,我想调用Array.Sort方法,微软为我们提供了快速排序算法。
    但是这里有一个问题——我要实现自定义排序规则,比如对于字符串,默认的是按字母顺序,但现在我想这样排序:

    按字符串长度排序,只有当长度不同时,再按字母排序。

    显然,微软不可能提供这样“个性”的排序方法,那是不是说,就必须让我们自己去写快速排序算法呢?
    不需要!
    我们只需要使用委托,就能实现这个要求:
    string[]strs="I like C# very much".Split();
    Array.Sort(strs,Rule);
    int void Rule(string first,string second)
    {
    return first.Length==second.Length?first.CompareTo(second):first.Length.CompareTo(second.Length);
    }

    显然,我并不需要知道快速排序算法的逻辑,我只需要告之排序规则,就实现了我的个性排序。

    试问:如果没有委托,你如何解决这个问题?

    最简单的例子2:

    Array有一个Sort方法,如果要实现自定义排序,有两个重载:委托和接口

    委托:
    public static void Sort<T> (
        T[] array,
        Comparison<T> comparison
    )
    接口:
    public static void Sort<T> (
        T[] array,
        IComparer<T> comparer
    )

    例子2

    现在我要对一系列数据进行排序,而排序算法可能比较复杂,我不会自己写,我想调用Array.Sort方法,微软为我们提供了快速排序算法。
    但是这里有一个问题——我要实现自定义排序规则,比如对于字符串,默认的是按字母顺序,但现在我想这样排序:

    按字符串长度排序,只有当长度不同时,再按字母排序。

    显然,微软不可能提供这样“个性”的排序方法,那是不是说,就必须让我们自己去写快速排序算法呢?
    不需要!
    我们只需要使用委托,就能实现这个要求:
    string[]strs="I like C# very much".Split();
    Array.Sort(strs,Rule);
    int void Rule(string first,string second)
    {
    return first.Length==second.Length?first.CompareTo(second):first.Length.CompareTo(second.Length);
    }

    显然,我并不需要知道快速排序算法的逻辑,我只需要告之排序规则,就实现了我的个性排序。

    试问:如果没有委托,你如何解决这个问题?     

    这里有一篇白话的委托和事件

    http://www.cnblogs.com/wudiwushen/archive/2010/04/20/1703763.html

  • 相关阅读:
    2018CodeM复赛
    poj3683
    bzoj3991
    bzoj2809
    bzoj1001
    bzoj1412
    计蒜之道2018复赛
    HDU2255
    bzoj1010
    bzoj2006
  • 原文地址:https://www.cnblogs.com/sheseido/p/5875552.html
Copyright © 2011-2022 走看看