一个很菜的问题希望好心人能解答!
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()中
------解决方案--------------------
bqb 2008年06月13日 11点27分21秒 说:
SORT 是Comparison<>中的一个方法吗?
bqb 2008年06月13日 11点28分41秒 说:
dinosaurs.Sort(CompareDinosByLength);
为什么传CompareDinosByLength这个参数就能排序?
====================================================
首先我劝你先看看delegate的概念,泛型委托只不过是是delegate更强大而已。其他的没有关系。之所以可以这样
dinosaurs.Sort(CompareDinosByLength);
这是因为c#2.0里里面简化了对委托的使用,在1.1里要这样
dinosaurs.Sort(new Comparison<object>(CompareDinosByLength));
[解决办法]
给你展现下泛型委托的好处,快速反射得到实体属性的值
- C# code
delegate R Func<T, R>(T t); //泛型委托class Program8 { class User //实体类 { string _name; public string Name { get { return _name; } set { this._name = value; } } } class QuickReflection <T> //快速反射类 { //生成泛型委托 public static Func <T, R> Get_GetDelegate <R>(string pName) { Type t = typeof(T); PropertyInfo p = t.GetProperty(pName); return (Func <T, R>)Delegate.CreateDelegate(typeof(Func <T, R>), p.GetGetMethod()); } } public static void Main() { User u = new User(); u.Name = "Lucifer"; //快速访问实体属性值 Console.Write(QuickReflection <User>.Get_GetDelegate <string>("Name")(u)); } }
[解决办法]
泛型不是简单的让程序执行效率更高,更安全。泛型是一种更高的抽象概念,等你接触了Linq你就能体会出来了。
[解决办法]
楼主,我感觉你看书看的方式不对!
[解决办法]
这段代码主要是在委托上
你先把委托的概念理解一下吧
参考如下
http://www.cnblogs.com/jimmyzhang/archive/2007/09/23/903360.html
http://msdn.microsoft.com/zh-cn/library/900fyy8e(VS.80).aspx
[解决办法]
不要让一个问题给绊倒!
泛型不是很好理解,日常工作中就理解了!!
[解决办法]
委托相当于c语言中的指针!指向一个方法!!
VectorDelegates.Compare应该是一个方法!!
[解决办法]
相同指的是返回类型相同,参数类型相同,参数数量一样!!!
[解决办法]
bqb 2008年06月13日 14点32分14秒 说:
不好意思啊,我还没有明白!
Comparison <Vector> sorter = new Comparison <Vector>(VectorDelegates.Compare);
VectorDelegates.Compare 作为 Comparison <Vector>委托的签名
委托实例sorter应该要有两个参数,怎么没有 sorter(参数1,参数2),而且返回值应该是: 1,-1,0
==============================================================================
强烈要求你还本书看,你看了半天都没理解委托的概念说明这本书不好。
public delegate int Comparison<T>(T x, T y); 这个是Comparison委托的定义,你说他有2个参数是吧x,y。这就说明凡是有两个参数通过返回值为int类型的它全能比配。但是要怎么使用呢。就是这样:
Comparison <Vector> sorter = new Comparison <Vector>(VectorDelegates.Compare);
这样就把VectorDelegates.Compare函数委托给Comparison <Vector>,而他的实例就是sorter,明白了。最简单的delegate就是一种特殊的class所以必须要new的,你使用的sorter就是delegate的实例,delegate的构造参数就一个函数
[解决办法]
就是一个泛型委托,指向了你VectorDelegates类中定义的泛型方法,从这个类名的英文单词VectorDelegates就可以知道了,哈哈
[解决办法]
你看到不会的方法,查msdm上边一般会有示例代码
------解决方案--------------------
什么都不懂时要问题,其实人家都讲的很明白的了,自己还是不理解,这种感觉真的好痛苦!等明白后
真的是些基本的东西。在这里要非常感谢回帖的各位好心人!太感谢抽时间帮我看问题和耐心讲解!
==
都是从这步走过来的