C#开发的进化史(从简单的数据类型开始)
2015-11-03 14:38
211 查看
将从定义一个Product类开始,封装几个属性。讲述C#1---C#4的进化过程:
一、C#1 只读属性,弱类型集合
问题一:创建属性和变量的代码很复杂
问题二:代码为属性提供了公共的取值方法,如果添加对应的赋值方法,那Set就必须是公共的
问题三:ArrayList没有对类型进行限制,如果赋值的时候随便添加一个字符串,编译器并没有报错。例如GetList中list.Add("I am String type"),编译器也一样通过了
二、C#2 私有属性赋值方法,强制类型集合:
解决了C#1中的
问题二:属性拥有私有的赋值方法,注意看构造方法,使用了私有赋值的方法。
问题三:规定了这个List只能存Product2,,假如添加了不同类型到list中编译器就会报错。例如GetList()中list.Add("different data type"),编译器就会报错。
三、C#3 自动实现属性的Set和Get方法,增强集合和对象的初始化:
从代码看得出属性的get和set方法变得非常简便,集合的初始化也变得非常方便
四、C#4 命名实参:
当一个类的属性特别多的时候,用构造函数初始化的时候比较难看懂属性之前的对应关系。C#4中提供了命名实参,例如构造初始化时可以这样写 new Product4( price:12.3m,name:"Orange"),给参数命名赋值。
这是今天看到的,所以记录下来。写的不是很好,可能还有很多错误,希望大神指正。参考Depth in C sharp
一、C#1 只读属性,弱类型集合
#region C# 1 public class Product { string name; decimal price; public string Name { get { return name; } } public decimal Price { get { return price; } } public Product(string name, decimal price) { this.name = name; this.price = price; } public static ArrayList GetList() { ArrayList list = new ArrayList(); list.Add(new Product("Orange", 12.3m)); list.Add(new Product("Apple", 10m)); return list; } public override string ToString() { return string.Format("{0},{1}", name, price); } } #endregion
问题一:创建属性和变量的代码很复杂
问题二:代码为属性提供了公共的取值方法,如果添加对应的赋值方法,那Set就必须是公共的
问题三:ArrayList没有对类型进行限制,如果赋值的时候随便添加一个字符串,编译器并没有报错。例如GetList中list.Add("I am String type"),编译器也一样通过了
二、C#2 私有属性赋值方法,强制类型集合:
#region C# 2 public class Product2 { string name; decimal price; public string Name { get { return name; } private set{name=value;}} public decimal Price {get { return price; } private set{price=value;}} public Product2(string name, decimal price) { Name = name; Price = price; } public static List<Product2> GetList() { List<Product2> list = new List<Product2>(); list.Add(new Product2("Orange", 12.3m)); list.Add(new Product2("Apple", 10m)); return list; } public override string ToString() { return string.Format("{0},{1}", name, price); } } #endregion
解决了C#1中的
问题二:属性拥有私有的赋值方法,注意看构造方法,使用了私有赋值的方法。
问题三:规定了这个List只能存Product2,,假如添加了不同类型到list中编译器就会报错。例如GetList()中list.Add("different data type"),编译器就会报错。
三、C#3 自动实现属性的Set和Get方法,增强集合和对象的初始化:
#region C# 3 public class Product3 { public string Name { get; private set; } public decimal Price { get; private set; } public Product3(string name, decimal price) { Name = name; Price = price; } Product3() { } public static List<Product3> GetList() { return new List<Product3>{ new Product3("Orange",12.3m), new Product3("Apple", 10m) }; } public override string ToString() { return string.Format("{0},{1}", Name, Price); } } #endregion
从代码看得出属性的get和set方法变得非常简便,集合的初始化也变得非常方便
四、C#4 命名实参:
当一个类的属性特别多的时候,用构造函数初始化的时候比较难看懂属性之前的对应关系。C#4中提供了命名实参,例如构造初始化时可以这样写 new Product4( price:12.3m,name:"Orange"),给参数命名赋值。
#region C# 4 public class Product4 { readonly string name; readonly decimal price; public string Name { get { return name; } } public decimal Price { get { return price; } } public Product4(string name, decimal price) { this.name = name; this.price = price; } public static List<Product4> GetList() { return new List<Product4>{ new Product4( price:12.3m,name:"Orange"), new Product4("Apple", 10m) }; } public override string ToString() { return string.Format("{0},{1}", name, price); } } #endregion
这是今天看到的,所以记录下来。写的不是很好,可能还有很多错误,希望大神指正。参考Depth in C sharp
相关文章推荐
- c#基础5
- c#基础5
- Interview Prep for xx company
- (原创)c#学习笔记08--面向对象编程简介03--Windows应用程序中的OOP
- C#第六天
- C#后台获取不到GridView中的LinkButton等控件
- (原创)c#学习笔记08--面向对象编程简介02--OOP技术07--引用类型和值类型
- 深刻理解C#中资源释放
- C# 给对象赋null值会释放内存吗?
- (原创)c#学习笔记08--面向对象编程简介02--OOP技术06--事件
- (原创)c#学习笔记08--面向对象编程简介02--OOP技术05--运算符重载
- C# 命名规范
- 基于gdal用c#读取hdf4文件
- C#读取HDF5文件.doc
- (原创)c#学习笔记08--面向对象编程简介02--OOP技术04--对象之间的关系
- c# 内存溢出错误
- C# 匿名类型的基本特征
- C#中的 == 和equals()区别浅析
- C# 拷贝文件到另一个目录
- c#视频位置