值类型和引用类型

mac2022-06-30  76

在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/16 

 decimal类型

名称CTS类型说明位数decimalSystem。Decimal128位高精度十进制数表示法28

bool类型:

名称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

最新回复(0)