日期:2014-05-18  浏览次数:20958 次

一个很菜的问题希望好心人能解答!
C# 入门经典(第三版) 第12章 泛型 
全文在下面的链接中 
http://book.csdn.net/bookfiles/30/10030856.shtml 
当中的例子 CH12Ex03 




(7) 添加一个新类VectorDelegates。 

(8) 修改VectorDelegates.cs中的代码,如下所示: 

public static 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; 







(9) 修改Program.cs中的代码,如下所示: 

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)); 


Console.WriteLine(route.Sum()); 


Comparison <Vector> sorter = new Comparison <Vector>(VectorDelegates.Compare); 

route.Sort(sorter); 

Console.WriteLine(route.Sum()); 


Predicate <Vector> searcher = 

new Predicate <Vector>(VectorDelegates.TopRightQuadrant); 

Vectors topRightQuadrantRoute = new Vectors(route.FindAll(searcher)); 
Console.WriteLine(topRightQuadrantRoute.Sum()); 


Console.ReadKey(); 







红色字体的部分,不明白! 

Comparison 泛型委托 
Comparison <Vector> sorter = new Comparison <Vector>(VectorDelegates.Compare); 
表示比较同一类型的两个对象的方法。 返回值 0, <0 ,>0 
那实例化的sorter是什么呢? 
当中的参数VectorDelegates.Compare........真的不理解! 
太多的疑问了,请好心人帮忙答疑解惑! 


------解决方案--------------------
首先没看到红色字体
Comparison <Vector> sorter = new Comparison <Vector>(VectorDelegates.Compare); 
这个不是一个构造吗?
------解决方案--------------------
泛型 很好用 功能很强大 不过我也在学习中

帮你UP下!


------解决方案--------------------
Comparison是委托对吧,所以正常情况下使用委托就是 
Comparison <Vector> sorter = new Comparison <Vector>(VectorDelegates.Compare); 

根据一个函数生成这个委托,你也可以这么写
route.Sort(VectorDelegates.Compare);

还可以这么写
route.Sort(delegate(Vector x, Vector y) 

if (x.R > y.R) 

return 1; 

else if (x.R < y.R) 

return -1; 

return 0; 
});



------解决方案--------------------
Comparison<T> 泛型委托表示比较同一类型的两个对象的方法。
此委托由 Array 类的 Sort<(Of <(T>)>)(array<T>[]()[], Comparison<(Of <(T>)>)) 方法重载和 List<(Of <(T>)>) 类的 Sort(Comparison<(Of <(T>)>)) 方法重载使用,用于对数组或列表中的元素进行排序。

------解决方案--------------------
List的Sort()方法其中一个重载是接受泛型委托作为参数
CompareDinosByLength是一个方法,作为参数传到List的Sort()中
------解决方案--------------------