1、数据类型的进化

C#1中实现Product类型代码

  1. public class Product
  2. {
  3. string name;
  4. public string Name
  5. {
  6. get { return name; }
  7. }
  8.  
  9. decimal price;
  10. public decimal Price
  11. {
  12. get { return price; }
  13. }
  14.  
  15. public Product(string name, decimal price)
  16. {
  17. this.name = name;
  18. this.price = price;
  19. }
  20.  
  21. public static ArrayList GetSampleProducts()
  22. {
  23. ArrayList list = new ArrayList();
  24. list.Add(new Product("West Side Story", 9.99m));
  25. list.Add(new Product("Assassins", 14.99m));
  26. list.Add(new Product("Frogs", 13.99m));
  27. list.Add(new Product("Sweeney Todd", 10.99m));
  28. return list;
  29.  
  30. }
  31.  
  32. public override string ToString()
  33. {
  34. return string.Format("{0}: {1}", name, price);
  35.  
  36. }
  37.  
  38. }

C#2中的强类型集合和私有的赋值方法

  1. public class Product
  2. {
  3. string name;
  4. public string Name
  5. {
  6. get { return name; }
  7. private set { Name = value; } 私有的赋值方法
  8. }
  9.  
  10. decimal price;
  11. public decimal Price
  12. {
  13. get { return price; }
  14. private set { Price = value; }
  15. }
  16. //C#3:Product(){}
  17. public Product(string name, decimal price)
  18. {
  19.  
  20. Name = name;
  21. Price = price;
  22. }
  23. public static List<Product>GetSampleProducts()
  24. {
  25. List<Product>list= new List<Product>();
  26. list.Add(new Product("West Side Story", 9.99m));
  27. list.Add(new Product("Assassins", 14.99m));
  28. list.Add(new Product("Frogs", 13.99m));
  29. list.Add(new Product("Sweeney Todd", 10.99m));
  30. return list;
  31.  
  32. }
  33.  
  34. public override string ToString()
  35. {
  36. return string.Format("{0}: {1}", name, price);
  37.  
  38. }
  39.  
  40. }

C#3自动实现的属性和更简单的初始化

  1. public class Product
  2. {
  3. public string Name { get; private set; }
  4. public string Price { get; private set; }
  5.  
  6. public Product(string name, decimal price)
  7. {
  8.  
  9. Name = name;
  10. Price = price;
  11. }
  12.  
  13. private Product()
  14. {
  15. }
  16.  
  17. public static List<Product> GetSampleProducts()
  18. {
  19. return new List<Product>
  20. {
  21. new Product {Name = "West Side Story", Price = 9.99m},
  22. new Product {Name = "Assassins", Price = 14.99m},
  23. new Product {Name = "Frogs", Price = 13.99m},
  24. new Product {Name = "Sweeney Todd", Price = 10.99m}
  25. };
  26. }
  27.  
  28. public override string ToString()
  29. {
  30. return string.Format("{0}: {1}", Name, Price);
  31. }
  32.  
  33. }

C#4中命名实参

  1. public class Product
  2. {
  3.  
  4. public override string ToString()
  5. {
  6. return string.Format("{0}: {1}", name, price);
  7. }
  8. //C#4中的参数:尽管私有赋值不能被公共的改变,但如果要求它也不能被私有的改变,将会更加的清晰,在C#4中,我们用调用构造函数时指定实参的名称
  9. readonly string name;
  10. public string Name { get { return name; } }
  11. return new List<Product>
  12. {
  13. new Product {name = "West Side Story", price = 9.99m},
  14. new Product {name = "Assassins", price = 14.99m},
  15. new Product {name = "Frogs", price = 13.99m},
  16. new Product {name = "Sweeney Todd", price = 10.99m},
  17. };
  18.  
  19. }

2、排序和过滤的演化

1、排序

C#1中使用IComparer对ArrayList进行排序

  1. class ProductNameComparer : IComparer
  2. {
  3. public int Compare(object x, object y)
  4. {
  5. Product first = (Product)x;
  6. Product second = (Product)y;
  7. return first.Name.CompareTo(second.Name);
  8. }
  9. }
  10. static void Main()
  11. {
  12. ArrayList products = Product.GetSampleProducts();
  13. products.Sort(new ProductNameComparer());
  14. foreach (Product product in products)
  15. {
  16. Console.WriteLine(product);
  17. }
  18. }

C#2中使用IComparer<product>对List<Product>进行排序

  1. class ProductNameComparer : IComparer<Product>
  2. {
  3. public int Compare(Product x, Product y)
  4. {
  5. return x.Name.CompareTo(y.Name);
  6. }
  7. }
  8. static void Main()
  9. {
  10. List<Product> products = Product.GetSampleProducts();
  11. products.Sort(new ProductNameComparer());
  12. foreach (Product product in products)
  13. {
  14. Console.WriteLine(product);
  15. }
  16. }

C#2中使用委托进行比较

  1. /*
  2. * C#2的方法1确实有了一定的改进,但是我们希望能直接指定要进行的标胶,就能开始对产品进行排序,而不需要实现一个接口来做这件事
  3. * 下面它告诉sort方法如何用一个委托来比较俩个产品.省略了接口实现的代码和products.Sort(new ProductNameComparer());
  4. * List<Product> products = Product.GetSampleProducts();
  5. * products.Sort(delegate (Product x,Product y)
  6. * {return x.Name.CompareTo(y.Name);}
  7. * );
  8. */

C#3中使用lambda表达式进行比较

  1. List<Product> products = Product.GetSampleProducts();
  2. products.Sort((x,y)=>x.Name.CompareTo(y.Name));
  3. foreachProduct product in products
  4. {
  5. console.writeline(product);
  6. }
  7. C#3还有另一种写法排序
  8. foreachProduct product in product.OrderByp=>p.Name))
  9. {
  10. console.writeline(product);//通知轻松的按顺序打印名称,同时不必修改原产品列表
  11. }

2、查询

循环、测试和打印(C#1)

  1. ArrayList products = Product.GetSampleProducts();
  2. foreach (Product product in products.Cast<Product>().Where(product => product.Price > 10m))
  3. {
  4. Console.WriteLine(product);
  5. }

测试和打印分开进行(C#2)

  1. List<Product> products =Product.GetSampleProducts();
  2. Predicate<Product> test = delegate(Product p){ return p.Price > 10m;};
  3. List<Product> matches=products.FindAll(test);
  4. Action<Product> print=console.writeLine;
  5. matches.ForEach(print);

测试和打印分开进行的另一个版本(C#2)

  1. List<Product> products =Product.GetSampleProducts();
  2. products.FindAlldelegate Product p){ return p.Price >;}).ForEach(Console.WriteLine);

用lambda表达式来进行测试(c#3)

  1. List<Product> products =Product.GetSampleProducts();
  2. foreachProduct product in products.Wherep=>p.price>))
  3. {
  4. Console.WriteLine(product);
  5. }

C#中使用Linq表达式

  1. foreach (Product product in products.Cast<Product>().Where(product => product.Price > 10m))
  2. {
  3. Console.WriteLine(product);
  4. }

C#开发的进化史的更多相关文章

  1. C#复习笔记(1)--C#开发的进化史

    前言:陆续使用C#已经有一年半的时间.中间做过一些应用,现在为了有更高的提升,决定重新看一遍C# in depth,并总结一些笔记. 一.从简单的数据类型开始 上面是C#1到C#4中的一部分演变历程. ...

  2. js开发模式

    js中的开发模式进化史: js中有最初的只能由基本数据类型描述——>单例模式-->工厂模式-->构造函数模式-->原型模式-->各个模式相结合的混合模式,下面我会给大家逐 ...

  3. C# in depth学习(1)

    第一章,C#开发的进化史 1.简单数据类型 2.排序 Sorting an ArrayList using IComparer (C# 1) Sorting a List<Product> ...

  4. 巩固基础知识,从C# in depth开始

    真是书到用时方恨少,平时都是完成任务,书都是看个前面几章就扔书柜了.... 今天看了博客园一篇文章<我们为什么应该坚持写博客>,很有感触,觉得人生不能得过且过,以前为了各种原因,家庭,孩子 ...

  5. 深入理解c#(第三版)(文摘)

    第一部分 基础知识 第1章 C#开发的进化史 1.3 1.3.1 表示未知的价格 public decimal? Price { get; private set; } new ProductWith ...

  6. C# InDepth 第一章

    深入理解C#第一部分,第一章介绍了C#开发得进化史. 1 从数据类型定义引入c#1到4中得改变 c#2:强类型集合(泛型) c#3:自动实现得属性和简化得初始化 c#4:命名实参 2 排序和过滤 排序 ...

  7. 《深入理解C#(第3版)》

    <深入理解C#(第3版)> 基本信息 原书名:C# in depth 作者: (英)Jon Skeet 译者: 姚琪琳 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:978 ...

  8. Android开发学习总结——Android开发的一些相关概念

    一.什么是3G.4G 1995年问世的第一代模拟制式手机(1G)只能进行语音通话. 1996到1997年出现的第二代GSM.CDMA等数字制式手机(2G)便增加了接收数据的功能 Ÿ 3G指的是第三代移 ...

  9. 最受Web前端开发者欢迎的五大开发工具

    工其事,必利于器.好的开发工具毋容置疑会帮助Web前端开发者事半功倍,51CTO在上期主办的技术沙龙<大型网站PHP开发之道> 对现场的百余位Web开发者做了问卷调查,后经51CTO调研小 ...

随机推荐

  1. USB数据线上的“疙瘩”:原来有这么大用处!

    在不少键盘.鼠标或是游戏外设的数据线末端我们都能见到一小段金属圆环.虽然这算得上是习以为常的一个设计,但如果说到其具体作用的话很多人一下子还真回答不上来.反正笔者在这里先可以告诉大家,这货肯定不是简简 ...

  2. Android Studio 使用笔记:Git 的配置和第一次提交到仓库

    Git客户端网址:http://git-scm.com/download/ 根据自己的使用平台下载对应的客户端.这里以Mac系统为例,当客户端软件安装配置完毕后,打开AS的配置面板,找到Git的选项 ...

  3. 启动redis出现Creating Server TCP listening socket *:6379: bind: No such file or directory

    E:\redis>redis-server.exe redis.windows.conf [8564] 10 Oct 20:00:36.745 # Creating Server TCP lis ...

  4. 基于B/S模式的推送

    基于B/S模式的推送 https://www.ibm.com/developerworks/cn/web/wa-lo-comet/ 传统模式的 Web 系统以客户端发出请求.服务器端响应的方式工作.这 ...

  5. win7下安装load generator

    win7下只安装loadrunner load generator 1.点击setup.exe 2.选择“loadrunner 完整安装程序”   3.安装完成所需要的插件,然后重启 4.重新打开安装 ...

  6. 将多个Sheet导入到同一个Excel文件中

    实体类excel import java.util.List; /** * 功能: * 描述: * @author * @date 2015-3-19 下午5:15:48 */ public clas ...

  7. [ZETCODE]wxWidgets教程五:布局管理

    本教程原文链接:http://zetcode.com/gui/wxwidgets/layoutmanagement/ 翻译:瓶哥 日期:2013年12月4日星期三 邮箱:414236069@qq.co ...

  8. cocos2d-x 2.1.4 使用create_project.py脚本创建项目+ant打包项目

    1.创建项目:执行create_project.py脚本,进入Doc界面输入下面的命令: cd D:\cocos2d-x-2.1.4\cocos2d-x-2.1.4\tools\project-cre ...

  9. 使用VNC实现多用户登录linux系统

    vmare版本:12.0.0 build-2985596

  10. 如何在WIN7中关闭JAVA自动更新

    在win7系统上面安装了JAVA JRE或JDK后,就会启动一个jusched,它会定时检查更新,每次开机都会推荐更新或者升级,可能有的朋友在win7下无论如何都关不掉java客户端的自动更新,而又不 ...