1、数据类型的进化

C#1中实现Product类型代码

 public class Product
{
string name;
public string Name
{
get { return name; }
} decimal price;
public decimal Price
{
get { return price; }
} public Product(string name, decimal price)
{
this.name = name;
this.price = price;
} public static ArrayList GetSampleProducts()
{
ArrayList list = new ArrayList();
list.Add(new Product("West Side Story", 9.99m));
list.Add(new Product("Assassins", 14.99m));
list.Add(new Product("Frogs", 13.99m));
list.Add(new Product("Sweeney Todd", 10.99m));
return list; } public override string ToString()
{
return string.Format("{0}: {1}", name, price); } }

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

  public class Product
{
string name;
public string Name
{
get { return name; }
private set { Name = value; } 私有的赋值方法
} decimal price;
public decimal Price
{
get { return price; }
private set { Price = value; }
}
//C#3:Product(){}
public Product(string name, decimal price)
{ Name = name;
Price = price;
}
public static List<Product>GetSampleProducts()
{
List<Product>list= new List<Product>();
list.Add(new Product("West Side Story", 9.99m));
list.Add(new Product("Assassins", 14.99m));
list.Add(new Product("Frogs", 13.99m));
list.Add(new Product("Sweeney Todd", 10.99m));
return list; } public override string ToString()
{
return string.Format("{0}: {1}", name, price); } }

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

  public class Product
{
public string Name { get; private set; }
public string Price { get; private set; } public Product(string name, decimal price)
{ Name = name;
Price = price;
} private Product()
{
} public static List<Product> GetSampleProducts()
{
return new List<Product>
{
new Product {Name = "West Side Story", Price = 9.99m},
new Product {Name = "Assassins", Price = 14.99m},
new Product {Name = "Frogs", Price = 13.99m},
new Product {Name = "Sweeney Todd", Price = 10.99m}
};
} public override string ToString()
{
return string.Format("{0}: {1}", Name, Price);
} }

C#4中命名实参

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

2、排序和过滤的演化

1、排序

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

 class ProductNameComparer : IComparer
{
public int Compare(object x, object y)
{
Product first = (Product)x;
Product second = (Product)y;
return first.Name.CompareTo(second.Name);
}
}
static void Main()
{
ArrayList products = Product.GetSampleProducts();
products.Sort(new ProductNameComparer());
foreach (Product product in products)
{
Console.WriteLine(product);
}
}

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

  class ProductNameComparer : IComparer<Product>
{
public int Compare(Product x, Product y)
{
return x.Name.CompareTo(y.Name);
}
}
static void Main()
{
List<Product> products = Product.GetSampleProducts();
products.Sort(new ProductNameComparer());
foreach (Product product in products)
{
Console.WriteLine(product);
}
}

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

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

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

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

2、查询

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

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

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

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

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

List<Product> products =Product.GetSampleProducts();
products.FindAll(delegate (Product p){ return p.Price >;}).ForEach(Console.WriteLine);

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

List<Product> products =Product.GetSampleProducts();
foreach(Product product in products.Where(p=>p.price>))
{
Console.WriteLine(product);
}

C#中使用Linq表达式

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

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. 【Xamarin挖墙脚系列:Xamarin.Android的API设计准则】

    原文:[Xamarin挖墙脚系列:Xamarin.Android的API设计准则] 前言 楼主也是看着Xamarin的官方文档来的.基本也是照猫画虎.英语勉强凑合.翻译的不对的地方,大家多多指教.(这 ...

  2. 17.1.4 Replication and Binary Logging Options and Variables 复制和Binary logging 选项和变量

    17.1.4 Replication and Binary Logging Options and Variables 复制和Binary logging 选项和变量 下面的章节包含信息关于mysql ...

  3. Method Overloading in WCF zt

    Method overloading is the process of implementing Polymorphism in Object-Oriented Programming. A met ...

  4. EntityFramework在不同数据库下的配置

    1.SQLServer: <connectionStrings> <add name="EntityDesignEntities" connectionStrin ...

  5. 用户故事(User Story)

    摘要: 一件用户通过系统完成他一个有价值的目标(买一罐饮料)的事.这样的过程就叫“用户案例(user case)”或者“用户故事(user story)”.本文描述了敏捷开发的技巧:如何以用户故事管理 ...

  6. MongoDB:The Definitive Guide CHAPTER 2 Getting Started

    MongoDB is very powerful, but it is still easy to get started with. In this chapter we’ll introduce ...

  7. hdoj 1787 GCD Again【欧拉函数】

    GCD Again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  8. C++ primer(八)--内联函数 引用变量 引用传递函数参数 函数重载/模板/模板具体化

    一.内联函数     常规函数和内联函数的区别在于C++编译器如何将他们组合到程序中.编译过程的最终产品是可执行程序--由一组机器语言指令组成.运行程序时,操作系统将这些指令载入到计算机内存中,因此每 ...

  9. android-配置虚拟机Virtual device

    Android的应用程序是基于virtual device运行的,在运行一个android的应用程序之前先要配置要virtual device

  10. Flex开发小结(1)如何使用AdvancedDataGrid

    1.AdvancedDataGrid扩展了普通DataGrid的功能,AdvancedDataGrid控件提供了另外一些特性,并在数据显示.数据聚合和数据格式化方面有着强大的控制力. 这里我主要说一下 ...