深入理解C#(三)

*第一章(大致了解C#各个版本的特性:处理未知数据)

表示未知的值类型

问题描述:decimal表示产品价格,是值类型,若某个产品价格未知,该如何表示?(若是引用类型,可用null表示)

C# 1解决方案:

  • 给decimal建一个引用类型包装器
  • 用一个单独的bool标志,表示价格是否已知
  • 使用一个魔数(magic value)来表示,如decimal.MinValue

C# 2:

Nullable结构,提供一些语法糖来简化。
例子:

1
2
3
4
5
6
decimal? price;
public decimal? Price
{
get{return price;}
private set{price=value;}
}

Price=null;
null现在表示“没有其他数据的任意可空类型的一个特殊值”

所有引用类型和基于Nullable的类型为可空类型

与null值作比较,结果总是false

可选参数和默认值

问题描述:对一个方法或构造函数,有时我们会自己设定参数,这时往往需要重构来减少参数量,并设置我们的默认值。有什么方法能简化?

C#4:

可选参数和默认值:
例子:

1
2
3
4
5
public Product(string name,decimal? price=null)
{
this.name=name;
this.price=price;
}

这里对于可空类型的参数price,我们设定他为可选参数,默认值为null,这样我们就不需要重载这个构造函数,但我们依然能使用形如:Product p=new Product("Unreleased product");这样的方式构造一个Product实例,因为price被设定有默认值null。