C#开发的进化史

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
39     }

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
20     }

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 foreach(Product product in products)
 4 {
 5          console.writeline(product);
 6 }
 7 C#3还有另一种写法排序
 8 foreach(Product product in product.OrderBy(p=>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)

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

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

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

C#中使用Linq表达式

foreach (Product product in products.Cast<Product>().Where(product => product.Price > 10m))
{
Console.WriteLine(product);
}
时间: 2024-10-15 20:25:28

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

我经历的前端开发模式进化史

萌芽 记得,在刚接触js那会儿,那时还没有专职的“前端开发”.当时的前端开发工作是由设计师(当时还叫“美工”)来完成的,在这种模式下,设计师需要完成页面的设计.切图.css.html,以及部分js交互的工作.这些完成的工作会成为设计资源的一部分被一并提供给开发人员,由于设计师对css.js了解的很有限,他们完成的页面代码会有许多问题还需要开发来调整和修改,当时的页面还都是后端同步渲染输出的,基本上大伙儿也只会改改一些js表单验证,常用的css属性.所以在这个时期,前端工具.类库.框架是几乎没有的

调研Android平台的开发环境的发展演变

一.发展演变 1.Android版本进化史 阿童木(Android beta)和发条机器人(Android1.0)->Cupcake(Android1.5)->Dount(Android1.6)->Eclair(Android2.0/2.1)->Froyo(Android2.2/2.2.1)->Gingerbread(Android2.3.x)->Honeycomb(Android3.0/3.1/3.2)->Ice Cream Sandwich(Android4.

4.1-全栈Java笔记:对象的进化史

面向对象和面向过程的区别 面向过程编程思想思考问题时,我们首先思考"怎么按步骤实现?"并将步骤对应成方法,一步一步,最终完成. 这个适合简单任务,不需要过多协作的情况下.比如,如何开车?我们很容易就列出实现步骤: 1. 发动车 2. 挂挡 3.踩油门 4. 走,你 面向过程适合简单.不需要协作的事务. 如果,我们需要思考"如何造车?",你就会发现列出1234这样的步骤,是不可能的.那是因为,造车太复杂,需要很多协作才能完成. 面向对象(Object)编程,更契合人的

Android应用安全隐患现状,安全防护进化史

前言 有安全数据显示,2014全年,Android用户感染恶意程序3.19亿人次,平均每天恶意程序感染量达到了87.5万人次.同时,Android应用被破解和盗版等事件也层出不穷.很明显,Android平台已经成为恶意程序和破解者攻击的众矢之的,于是越来越多的Android开发者开始意识到应用安全的重要性. 一.什么是"打包党" 他们专门对最热门或新秀APP下手,先将其破解,然后再以植入木马.插入广告.篡改支付链接等形式封装成新的APP,这个过程也叫做二次打包.更有开发者爆料,专业&q

机器学习进化史:从线性模型到神经网络

[深度]机器学习进化史:从线性模型到神经网络 本文作者:天诺 2015-05-05 16:54 导语:Reza Zadeh是斯坦福大学工程计算和数学研究所顾问教授,他主要专注于机器学习理论和应用,分布式计算.如果你对人工智能感兴趣,那他讲述的机器学习进化史你一定要看. Reza Zadeh是斯坦福大学工程计算和数学研究所顾问教授,也是Databricks公司技术顾问,他主要专注于机器学习理论和应用,分布式计算,以及离散应用数学.近日,他接受了oreilly网站的采访,尝试谈论了人工智能的各方面.

全局光照技术进化史1-光线追踪篇

本来计划是最近一年专心写书,不要花心思和精力写博客的,因为写一篇优质的博客文章其实也要花费不少的时间构思的:单篇博客虽然文字少但是你可能需要花费更多的精力在有限的篇幅内包括更多上下文信息,以及更精简地组织内容,在我看来它的创作付出不亚于图书内容写作(当然如果作者对自己要求没那么严谨的话可能也没那么严重). <游戏引擎全局光照技术>采取了一种新的出版形式,它从写作第一章开始,就积极和社区互动并开始宣传,其方式和游戏发行的思路一致:即在开发阶段不断推出测试版积极和玩家互动,并收集反馈信息进行持续改

Android应用开发-快速入门

内容摘要 了解Android 操作系统 搭建Android 开发工具 使用Android 模拟器 案例-电话拨号器/短信发送器 掌握点击事件的四种实现方式 掌握Android 常见布局 了解Android 中的长度单位 1. 手机制式 手机的发展根据通信技术大致可以划分为4 个时代(G:Generation 的缩写) 第一代模拟制式手机(1G):1G就是大哥大,手机类似于简单的无线电双工电台,通话是锁定在一定频率,所以使用可调频电台就可以窃听通话 第二代GSM.CDMA等数字手机(2G):手机使

从小纸条到大软件:足球科技进化史(一)

本文首发自懂球帝 世界杯之前,在ITPUB上翻到一篇主题讨论,关于『大数据.预测』,嗯,近两年你在互联网上几乎躲不开这几个字眼.媒体的威力不可小视,当这种95%以上业内人士都说不清道不明的概念也能在街边卖菜大婶的嘴里蹦出来的时候,你就知道,他和『小苹果』『欧巴江南style』无异了. 回想起来,数据仓库的概念也不过才诞生在90年代初期由Bill Inmon(数据仓库之父)提出.在足球领域用数据来作为决策支撑的理念很可能在2000年之后,大批量的数据采集,包括医疗.训练场上的表现.热成像摄影收集球

登录模块的进化史,带大家回顾java学习历程(二)

接着前面的登录模块的进化史,带大家回顾java学习历程(一) 继续往下面讲 前面我们去实现登录功能,都是想着要完成这个功能,直接在处理实际业务的类中去开始写具体的代码一步步实现,也就是面向过程的编程. 那么现在我们站在设计的角度上去实现该如何做呢?实际上在项目开发的时候,需求规划和数据库设计好之后,我们开始写代码,往往只用写一些接口出来,接口里面只有一些各个业务对应的空方法,没有具体的实现,在架构师进行接口设计的时候,就已经想好了该功能之后通过实现与调用这个接口肯定是可以实现的,等各个功能相关的