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

一个很菜的问题希望好心人能解答!
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()中
------解决方案--------------------