1.C#开发进化史

来源:互联网 发布:python 监控日志文件 编辑:程序博客网 时间:2024/06/06 18:29

1.1从简单的数据类型开始

//C#1中的Product类型using System.Collections;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));            list.Add("我添加了一个无关的字符串,编译器却那我没有办法!!!");            return list;        }        public override string ToString()        {            return string.Format("{0}:{1}", name, price);        }    }}

C#1代码存在如下3个缺陷:

1.ArrayList没有提供与其内部内容有关的编译时信息。不慎在GetSampleProducts创建的列表中添加一个字符串是完全可能的,而编译器对于此没有任何反应。

2.代码中为属性提供了公共的取值方法,这意味着如果添加对应的赋值方法,那么赋值方法也必须是公共的。

3.用于创建属性和变量的代码很复杂——封装一个字符串和一个十进制数应该是一个十分简单的任务,不该这么复杂。


//C#2中强类型集合和私有的赋值方法using System.Collections.Generic;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; }    }    public Product(string name, decimal price)    {        Name = name;        Price = price;    }    public static List GetSampleProducts()    {        List list = new List();        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中解决了上面3个缺陷中的前2个。
C#2中最重要的改变:泛型。
现在,属性拥有了私有的 赋值方法(只能类内使用,这里在构造函数中使用了这两个赋值方法)。并且它能非常聪明地猜出List<Product>是告知编译器列表中只能包含Product类型的值。试图将一个不同的类型添加到列表中,编译器就会报错,并且当你从列表中获取结果时,也不需要转换结果的类型,因为取出来的一定是Product类型的值。



0 0
原创粉丝点击