首先说说值类型和引用类型(有时也说类类型)即 value type和referance type。基本类型和结构体属于值类型,定义的类属于引用类型。值类型的默认值是0,引用类型的默认值是null(如果把null看作0,就可以说所以后的默认类型都是0了)。结构体的默认值由各成员的默认值构成。使用default关键字可以获得各种类型的默认值,如default(int),default(ArrayList),default(DateTime)。另外值类型必须保存一个值,而不能像引用类型那样使用null指示其没有保存任何数据。
再说说nullable,官方的名字是System.Nullable<T>是一个泛型,简写成T?。(好久没碰模板和泛型了,简单来说就是根据一种或几种类型构造出一种类型的机制)。Nullable<T>将值类型T转换成另外一种可以等于null的类型,用以指示没有保存任何值。泛型构造了一种新的数据结构,即一个类,用以满足值类型T的不足。
另外要提一下Nullabel<T>的隐式类型转换操作符 public static implicit operator T?(T value),即它可以将T转换成T? 该操作符可以接受null作为参数构造出一个对象。这解释了int? a=null后却可以访问a.HasValued,同时a==null的结果为true。当然也可以使用int? a=1做隐式转换,构造一个有值的对象。
最后说一下struct,struct在.net属于值类型.他有一个默认的构造函数,而且不能重写默认构造函数,其他的构造函数必须全部显式初始化各个成员。另外它不能从Object类继承,它继承自Struct,自成体系。
在c++里面,他已被看成是一个类了,除了默认访问权限不同其他都相同了。在java里已经没有他的身影了。