首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

一个很菜的有关问题希望好心人能解答

2012-02-29 
一个很菜的问题希望好心人能解答!C# 入门经典(第三版)第12章 泛型全文在下面的链接中http://book.csdn.net

一个很菜的问题希望好心人能解答!
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上边一般会有示例代码
------解决方案--------------------


什么都不懂时要问题,其实人家都讲的很明白的了,自己还是不理解,这种感觉真的好痛苦!等明白后 
真的是些基本的东西。在这里要非常感谢回帖的各位好心人!太感谢抽时间帮我看问题和耐心讲解!
==
都是从这步走过来的

热点排行