深入理解C#(三)
*第一章(大致了解C#各个版本的特性:处理未知数据)
表示未知的值类型
问题描述:decimal表示产品价格,是值类型,若某个产品价格未知,该如何表示?(若是引用类型,可用null表示)
C# 1解决方案:
- 给decimal建一个引用类型包装器
- 用一个单独的bool标志,表示价格是否已知
- 使用一个魔数(magic value)来表示,如decimal.MinValue
C# 2:
Nullable
例子:
1 | decimal? price; |
Price=null;
null现在表示“没有其他数据的任意可空类型的一个特殊值”
所有引用类型和基于Nullable
与null值作比较,结果总是false
可选参数和默认值
问题描述:对一个方法或构造函数,有时我们会自己设定参数,这时往往需要重构来减少参数量,并设置我们的默认值。有什么方法能简化?
C#4:
可选参数和默认值:
例子:
1 | public Product(string name,decimal? price=null) |
这里对于可空类型的参数price,我们设定他为可选参数,默认值为null,这样我们就不需要重载这个构造函数,但我们依然能使用形如:Product p=new Product("Unreleased product");
这样的方式构造一个Product实例,因为price被设定有默认值null。