值类型和引用类型
2022/11/25
值类型的祖宗
引用类型和值类型都继承自System.Object类。
1.几乎所有的引用类型都直接从System.Object继承
2.值类型则继承其子类——System.ValueType。
System.Object-->System.ValueType
System.ValueType本身是一个类类型,而不是值类型。
ValueType重写了Equals()方法,从而对值类型按照实例的值来比较,而不是引用地址来比较。
可以用Type.IsValueType属性来判断一个类型是否为值类型:
TestType testType = new TestType ();
if (testTypetype.GetType().IsValueType)
{
Console.WriteLine("{0} is value type.", testType.ToString());
}
string
C# 对于字符串做了特殊处理
string s1 = "a";
string s2 = s1;
s1` = "b";//s2 is still "a"
改变s1的值对s2没有影响。这更使string看起来像值类型。
实际上,这是运算符重载的结果,当s1被改变时,.NET在托管堆上为s1重新分配了内存。