黑马程序员技术交流社区

标题: 请教list.Sort(sorter)内部是怎么工作的? [打印本页]

作者: 黑马杨凯    时间: 2012-7-15 13:23
标题: 请教list.Sort(sorter)内部是怎么工作的?
本帖最后由 黑马杨凯 于 2012-7-16 09:05 编辑

最近学习泛型,在一个练习中有点迷惑,代码如下:

//Vectors类,用于存储Vector类对象的集合
public class Vectors: List<Vector>
    {
        public Vectors()
        {
        }

        public Vectors(IEnumerable<Vector> initialItems)
        {
            foreach (Vector vector in initialItems)
            {
                Add(vector);
            }
        }
   }

//VectorDelegates类,内部静态方法用于传递给委托,做比较,查询方法用
public class VectorDelegates
    {
        public static int Compare(Vector x, Vector y)
        {
            if (x.R > y.R)
            {
                return 1;
            }
            else if(x.R<y.R)
            {
                return -1;
            }
            return 0;
        }

        public static bool TopRightQuadrant(Vector target)
        {
            if (target.Theta > 0.0 && target.Theta <= 90.0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }


class Program
    {
        static void Main(string[] args)
        {
            Vectors route = new Vectors();
            route.Add(new Vector(2.0,90.0));
            route.Add(new Vector(1.0,180.0));
            route.Add(new Vector(0.5, 45.0));
            route.Add(new Vector(2.5, 315.0));

            

            Comparison<Vector> sorter = new Comparison<Vector>(VectorDelegates.Compare);
            route.Sort(sorter);//请问这里内部具体怎么工作的,通过使用反编译工具查看,还是不太清晰,请高手详细说明一下,主要是在匹配了Sort(Comparison<T> comparison)之后,运行了Array.Sort<T>(this._items, 0, this._size, (IComparer<T>) new Array.FunctorComparer<T>(comparison));后,就不是很清楚了
           }
}
作者: 许庭洲    时间: 2012-7-16 11:19
route.Sort(sorter);//通过Vectors类的方法Sort()调用VectorDelegates类,然后传递给委托进行排序




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2