在C#中数据类型分为值类型和引用类型,值类型例如:int、bool、long等,引用类型例如:string等。
从概念上,值类型和引用类型的区别是:值类型直接存储其值,而引用类型存储对值的引用。
这两种类型存储在内存中的不同位置,值类型存储在内存的堆栈中,引用类型存储在托管堆上。注意,区分某个类型是值类型还是引用类型,因为这种存储位置的不同会有不同的影响。例如,int是值类型,int i=20;int j=i;//这两个语句会在内存的两个地方存储20;
假设已经定义了一个类Vector,Vector是一个引用类型,他有一个int类型的成员变量Value;
Vector x,y;
x=new Vector();
x.Value=20;
y=x;
Console.WriteLine(y.Value);
y.Value=50;
Console.WriteLine(x.Value);
那么在控制台中会输出什么呢?
Vector只有一个对象,x、y为引用类型的变量,声明的这两个变量都指向该对象,所以,输出的值为20和50.
如果变量是一个引用,那么可以把其值设置为null,表示不引用任何对象。
如果将引用设置为null,那就不能对他调用任何非静态的成员函数或字段,这么做运行期间会抛出异常。
值类型是通过值复制来的。
大多数更复杂的C#数据类型,包括我们自己声明的类都是引用类型。
C#有15个预定义类型,其中13个是值类型,2格式引用类型(string和object);
C#支持8个预定义整数类型,如下表所示:
名称CTS类型说明范围sbyteSystem.SByte8位有符号整数-128~127shortSystem.Int1616位有符号整数-32768~32767intSystem.Int3232位有符号整数-2147483648~2147483647longSystem.Int6464位有符号整数-9223372036854775808~9223372036854775807byteSystem.Byte8位无符号整数0~255ushortSystem.UInt1616位无符号整数0~65535uintSystem.UInt3232位无符号整数0~4294967295ulongSystem.UInt6464位无符号整数0~18446744073709551615浮点类型:
名称CTS类型说明位数范围(大致)floatSystem。Single32位单精度浮点数7 doubleSystem。Double64位双精度浮点数15/16decimal类型
名称CTS类型说明位数decimalSystem。Decimal128位高精度十进制数表示法28bool类型:
名称CTS类型说明位数boolSystem。Boolean表示true/falseNA字符类型:
名称CTS类型值charSystem。Char表示一个16位的(Unicode)字符预定义的引用类型:
名称CTS类型说明objectSystem。Object根类型,CTS中的其他类型都是从他派生而来的(包括值类型)stringSystem。StringUnicode字符串
转载于:https://www.cnblogs.com/jacksong/archive/2012/07/16/2593859.html