值类型东西的两种暗示方法:未装箱和已装箱,引用类型总是处于已装箱
值类型从System.ValueType派生。该类型供给了与System.Object不异要领,但System.ValueType重写了Equals要领, 能在两个东西的自断值完全匹配的前提下返回true。比外,System.ValueType重写了GetHashCode要领,生成哈希码时,这个重写要领所用的算法会将东西的实例字段中的值考虑在内。由于这个默认实现存在性能问题,,所以界说本身的值类型时应重写Equals和GetHashCode要领,并供给它们的显式实现。
由于不能将值类型作为基类型来界说新的值类型或者新的引用类型,所以不应在值类型中引用任何新的虚要领。所以要领都不能是抽象的,所以要领都隐式密封(不成重写)。
.由于不能将值类型作为基类型来界说新的值类型或者新的引用类型,所以不应在值类型中引用任何新的虚要领。所以要领都不能是抽象的,所以要领都隐式密封(不成重写)。.引用类型的变量包罗堆中东西的地点。引用类型的变量创建时默认初始化为null,表白当前不指向有效东西。试图使用null引用类型变量会抛出NullReferenceException异常。相反,值类型的变量总是包罗其根本类型的一个值,而且值类型的所有成员都初始化为0。值类型变量不是指针,访谒值类型不成能抛出NullReferenceException异常。CLR确实允许为值类型添加“可空”(nullability)标识表记标帜。
将值类型变量赋给另一个值类型变量,会执行逐字段的复制。将引用类型的变量赋给另一个引用类型的变量只复制内存地点。
基于上一条,两个或多个引用变量能引用堆中同一个东西,所以对一个变量执行的操纵可能影响到另一个变量引用的东西。相反,值类型变量自成一体,对值类型变量执行的操纵不成能影响另一个值类型变量
由于未装箱的值类型不在堆中分配,一旦界说了该类型的一个实例的要领不再勾当,为它们分配的存储就会被释放,而不是等着进行垃圾回收。