值类型
引用类型
从概念上看,其区别是值类型直接存储其值,而引用类型存储对值的引用。
这两种类型存储在内存的不同地方:值类型存储在堆栈中,而引用类型存储在托管堆上。注意
区分某个类型是值类型还是引用类型,因为这种存储位置的不同会有不同的影响。
Vector X、 y`
x = new vector();
x.Value = 30; // Value is a £ield defined in Vector class
y=x;
Console.WriteLine(y.Value);
y.Value = 50; `
Console.WriteLine(x。Value)`
要理解的重要一点是在执行这段代码后,只有一个Vector对象。x和y都指向包含该对象的内存
位置。因为x和y是引用类型的变量,声明这两个变量只保留了一个引用一=而不会实例化给定类型
的对象。两种青况下都不会真正创建对象。要创建对象,就必须使用11ew关键字,如上所示。因为x
和y引用同t个对象,所以对x的修改会影响y,反之亦然。因此上面的代码会显示30和50。
如果变量是一个引用,就可以把其值设置为nu△,表示它不引用任何对象:
y = null;
CTs类型
C#认可的基本预定义类型并没有内置于C#言中,而是内置于,NET FramwOrk
中。例如,在C#声明一个int类型的数据时,声明的实际上是.Net结构system.int32的一个实例。
这听起来似乎很深奥,但其意义深远:这表示在语法上,可以把所有的基本数据类型看作是支持某
些方法的类。
预定义的值类型
1整型
2浮点型
3 decimal
4 bool
5 字符类型
预定义引用类型
1.object类型
许多编程语言和类结构都提供了根类型,层次结构中的其他对象都从它派生而来。C#和.Net
也不例外。在C#中,object类型就是最终的父类型,所有内置类型和用户定义的类型都从它派生而
来。这样,object类型就可以用于两个目的:
可以使用dobject引用绑定任何子类型的对象object类型执行许多一般用途的基本方法,包括Equals()、GethashCode()、GetType()和ToString()。用户定义的类需要使用一种面向对象技术——重写,提供其中一些方法的替代执行代码。例如,重写ToString()时,要给类提供一个方法,给出类本身的字符串表示。如果类中没有提供这些方法的实现代码,编译器就会使用object类型中的实现代码,它们在类中的执行不一定正确。