C#中的变量分为以下类型 :
值类型
参考类型
指针类型
值类型变量可以直接赋值.它们派生自类 System.ValueType .
值类型直接包含数据.一些示例是 int,char和float ,它们分别存储数字,字母和浮点数.当您声明 int 类型时,系统会分配内存来存储该值.
下表列出了C#2010中的可用值类型 :
Type | 代表 | 范围 | 默认值 |
---|---|---|---|
bool | 布尔值 | 判断对错 | 错误 |
byte | 8位无符号整数 | 0到255 | 0 |
char | 16位Unicode字符 | U +0000到U + ffff | '\ 0' |
decimal | 128位精确十进制值,28-29位有效数字 | ( - 7.9 x 10 28 至7.9 x 10 28 ) /10 0 至28 | 0.0M |
double | 64位双精度浮点类型 | (+/-)5.0 x 10 -324 至(+/-)1.7 x 10 308 | 0.0D |
float | 32位单精度浮点类型 | - 3.4 x 10 38 to + 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
引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用.
换句话说,它们指的是内存位置.使用多个变量,引用类型可以引用内存位置.如果内存位置中的数据由其中一个变量更改,则另一个变量会自动反映此值的更改. 内置引用类型的示例包括:对象,动态,和字符串.
对象类型是C#通用类型系统(CTS)中所有数据类型的最终基类. Object是System.Object类的别名.可以为对象类型分配任何其他类型,值类型,引用类型,预定义或用户定义类型的值.但是,在分配值之前,它需要进行类型转换.
当值类型转换为对象类型时,它被称为装箱,另一方面,当对象类型转换为值类型,称为取消装箱.
object obj; obj = 100; // this is boxing
您可以在动态数据类型变量中存储任何类型的值.对这些类型的变量进行类型检查是在运行时进行的.
声明动态类型的语法是 :
dynamic <variable_name> = value;
例如,
dynamic d = 20;
动态类型与对象类型类似,只是对象类型变量的类型检查在编译时发生,而动态类型变量的类型检查在运行时发生时间.
字符串类型允许您将任何字符串值分配给变量.字符串类型是System.String类的别名.它源自对象类型.可以使用字符串文字以两种形式分配字符串类型的值:quoted和@quoted.
例如,
String str = "Tutorials Point";
@quoted字符串文字看起来如下 :
@"Tutorials Point";
用户定义的引用类型是:class,interface或delegate.我们将在后面的章节中讨论这些类型.
指针类型变量存储另一种类型的内存地址. C#中的指针与C或C ++中的指针具有相同的功能.
声明指针类型的语法是 :
type* identifier;
例如,
char* cptr; int* iptr;
我们将在"不安全代码"一章中讨论指针类型.