变量类型
在 C# 中,变量被分为以下几种类型:
-
-
-
值类型
值类型的变量可以直接赋值。它们是从 System.ValueType
类派生而来。
值类型直接包含数据。例如 int
、char
和 float
分别存储数字、字母和浮点数。当你声明一个 int
类型时,系统会分配内存来存储这个值。
以下表格列出了 C# 2010 中可用的值类型:
类型 |
代表 |
范围 |
默认值 |
bool |
布尔值 |
True 或 False |
False |
byte |
8 位无符号整数 |
0 到 255 |
0 |
char |
16 位 Unicode 字符 |
U+0000 到 U+FFFF |
'\0' |
decimal |
具有 28-29 位有效数字的 128 位精确十进制值 |
(-7.9 x 10^28 到 7.9 x 10^28) / 100 到 28 |
0.0M |
double |
64 位双精度浮点类型 |
(+/-)5.0 x 10^-324 到 (+/-)1.7 x 10^308 |
0.0D |
float |
32 位单精度浮点类型 |
-3.4 x 10^38 到 + 3.4 x 10^38 |
0.0F |
int |
32 位带符号整数类型 |
-2,147,483,648 到 2,147,483,647 |
0 |
long |
64 位带符号整数类型 |
-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
0L |
sbyte |
8 位带符号整数类型 |
-128 到 127 |
0 |
short |
16 位带符号整数类型 |
-32,768 到 32,767 |
0 |
uint |
32 位无符号整数类型 |
0 到 4,294,967,295 |
0 |
ulong |
64 位无符号整数类型 |
0 到 18,446,744,073,709,551,615 |
0 |
ushort |
16 位无符号整数类型 |
0 到 65,535 |
0 |
为了在一个特定平台上获取某个类型或变量的确切大小,你可以使用 sizeof
方法。表达式 sizeof(type)
返回对象或类型在字节中的存储大小。下面是一个例子来获取任何机器上的 int
类型的大小:
实时演示
using System;
namespace DataTypeApplication {
class Program {
static void Main(string[] args) {
Console.WriteLine("Size of int: {0}", sizeof(int));
Console.ReadLine();
}
}
}
当以上代码被编译并执行时,它产生如下结果:
Size of int: 4
引用类型
引用类型并不包含变量中实际存储的数据,而是包含对变量的引用。
换句话说,它们指向一个内存位置。使用多个变量,引用类型可以指向同一个内存位置。如果其中一个变量改变了该内存位置的数据,那么其他变量也会自动反映出这个值的变化。内置引用类型的例子包括:object
、dynamic
和 string
。
对象类型
对象类型是 C# 公共类型系统 (CTS) 中所有数据类型的最终基类。对象是 System.Object
类的别名。对象类型可以被赋予任何其他类型的值,包括值类型、引用类型、预定义或用户定义的类型。但是,在赋值前,需要类型转换。
当一个值类型被转换成对象类型时,称为装箱;相反地,当一个对象类型被转换成值类型时,则称为拆箱。
object obj;
obj = 100;
动态类型
你可以存储任何类型的值在动态数据类型的变量中。这类变量的类型检查发生在运行时。
声明动态类型的语法如下:
dynamic <variable_name> = value;
例如,
dynamic d = 20;
动态类型与对象类型类似,除了对象类型的变量在编译时进行类型检查,而动态类型的变量则在运行时进行类型检查。
字符串类型
字符串类型允许你给一个变量赋任何字符串值。字符串类型是 System.String
类的别名。它派生于对象类型。字符串类型的值可以通过两种形式的字符串文字来赋值:引号和 @
引号。
例如,
String str = "Tutorials Point";
一个 @
引号字符串文字如下所示:
@"Tutorials Point";
用户定义的引用类型包括:类、接口或委托。我们将在后面的章节中讨论这些类型。
指针类型
指针类型的变量存储另一个类型的内存地址。C# 中的指针具有与 C 或 C++ 中指针相同的功能。
声明指针类型的语法如下:
type* identifier;
例如,
char* cptr;
int* iptr;
我们将在 'Unsafe Codes' 章节中讨论指针类型。