Use Generic Replacements of 1.X Framework API Classes 用泛型替换Framework 1.X版本的API类
第一章,第一节
用泛型替换Framework 1.X版本的API类。
说起来,我是没接触过Framework 1.X版本的程序,12年毕的业(算算时间也一年多了,依旧一事无成,汗),毕业之后到公司实习,然后转正,做项目,都是直接基于Framework 4.0的项目。上来就是List<T> ,Dictionary<TKey,TValue>,用的挺顺的,记得当时还问过一个问题,IList<T>和List<T>有什么区别,现在想起来有点可笑,一个是接口,一个类,有什么好比的。。。毕竟一般情况下C#是实例不出一个接口的,至于特殊情况么,就是在操作Excel的时候,偶然发现,,注意,这个是Interface哦,具体原因,不晓得。。。知道的朋友告诉一声。
言归正传,按书上讲的,用泛型两个好处,第一,安全。原先Framwork 1.X版本的API类很多返回Object类型,Object作为所有类型的基类,别人(也包括自己)在使用的时候,就要转换成具体的类型,否则,怎么获取属性,怎么调用方法呢。但是,这种强制转换是否成功是要在程序运行时才能检查出来。看到这个,还真深有体会。做项目的时候使用了Convert.ToDateTime(obj)来获取时间,,这个方法的N个重载中,最后一个的方法签名是的,也就是说,可以传入任何类型,然后程序中傻傻的不晓得传入了一个什么,然后就没有然后了。第二,高效。说到高效,首先最容易想到的就是装箱和拆箱了。最近也在看CLR Via C#,里面说的挺清楚的。顺便说一点,讨论装箱和拆箱的前提是必须有值类型,否则免谈。Father son = new Son();这里没有任何装箱拆箱的操作。
上述两个理由应该足以让我们用泛型而“不用”Object。不用这个词肯定是太绝对的,因为存在总是合理的,总是有价值的。为什么有价值呢?因为他能用,而且有些地方也必须要用。所谓的泛型,
举个自己工作中的例子。前段时间的工作基本都是围绕淘宝,京东,阿里三个开放平台展开的,我负责项目的数据接口这一块。淘宝自己提供了.Net的SDK,用起来感觉挺不错的,but,京东,阿里只有Java的(哎),为了调用方便,于是着手想写两个SDK。期间有两个重要的收获。第一个是在类的定义上。贴一段代码,看看就晓得了。
具体到某个具体的类
这样一来,当new OrderDetailGetReq()之后,得到的Response就肯定是OrderDetailGetRsp。就不用再像最初想的,返回一个AliResponse,然后在强制转换成OrderDetailGetRsp。
第二点就是关于IList和IList<T>的。在通过调用API得到的Json串来构造实体类上,写方法的时候是不晓得T到底是什么类型的,但是可以确定的是,肯定是一个数组。泛型的具体类型是在编译的时候就可以确定的,也是一种强类型。
var jsonRst = JsonConvert.Import(json) as IDictionary;
JsonConvert是Jayrock.Json.Conversion命名空间下的,一个常用的Json解析工具。这里,就必须写成as IDictionary,因为如果用泛型,TKey和TValue是不晓得。
书本后面讲的是一些应用,好长,好长,硬着头皮看完了,感觉没学到什么东西。。好像都是一些常用的。
到这里吧,第一篇。
觉得有用,赞一个。else,忽略。
转载请注明出处。