5.1.1 基本类型、值类型和对象
在 C# 中,我们可以使用基本值类型(例如,整数或字符),自定义值类型,用struct 关键字声明(例如,日期时间),和类。值类型和引用类型差别主要是基于它们的行为,但是,最显著的是,类是可变的。例如,字符串看起来像值类型,实际是引用类型,因为它是不可变的,意味着,只要通过使用不可变类型,我们几乎可以消除值和引用类型之间的差异。只在性能上有差别,行为是相同的。
我们还可以看到类型的复杂性。在 C# 中,这种区别并不是那么明显,因为,即使基本类型是标准的值类型,有方法,可以实现接口。不可变的值类型比起对象来,要简单得多,对象有有虚方法和可变的状态。
在函数语言中,我们从一组基本类型开始,可以构建复杂的类型,通过以不同的方式组合基本类型。这不同于面向对象的语言,在其中,根据基本类型,通过定义其状态,可以创建类型,并使用方法指定其行为。
函数的方法使整个类型系统相当容易,因为,在原理上,值类型和引用类型之间没有区别。另外,从简单类型过渡到复杂组成类型更平滑。在这个意义上,值是所有的基本类型,也是大多数简单的复合类型。复合类型太复杂而不能认为是一个值,要理解它,我们需要看看什么是数据。