位置:首页 > 高级语言 > C#在线教程 > C#数据类型

C#数据类型

在C#中,变量分为以下几种类型:

  • 值类型

  • 引用类型

  • 指针类型

值类型

值类型变量可以直接赋值。它们衍生自类System.ValueType。

值类型直接包含的数据。一些实例是整数,字符,浮点数,其存储的数字,字母,浮点数,分别。当声明一个int类型,系统分配内存来存储值。

下表列出了在C#2010可用值的类型:

类型 表示 范围 默认值
bool 布尔值 True 或 False False
byte 8-bit 无符号整数 0 - 255 0
char 16-bit Unicode字符 U +0000 到 U +ffff '\0'
decimal 128-bit 使用28-29显著数字精确十进制值 (-7.9 x 1028 到 7.9 x 1028) / 100 - 28 0.0M
double 64-bit 双精度浮点类型 (+/-)5.0 x 10-324  到 (+/-)1.7 x 10308 0.0D
float 32-bit 单精度浮点类型 -3.4 x 1038  到 + 3.4 x 1038 0.0F
int 32-bit 符号整型 -2,147,483,648  到 2,147,483,647 0
long 64-bit 符号整型 -923,372,036,854,775,808 到 9,223,372,036,854,775,807 0L
sbyte 8-bit 符号整型 -128 到 127 0
short 16-bit 符号整型 -32,768 to 32,767 0
uint 32-bit 无符号整型 0 到 4,294,967,295 0
ulong 64-bit 无符号整型 0 到 18,446,744,073,709,551,615 0
ushort 16-bit 无符号整型 0 到 65,535 0

要获取一个类型或在特定平台上的变量的确切大小,可以使用sizeof方法。表达式sizeof(type) 得到以字节为单位的对象或类型的存储大小。下面是一个例子来得到任何机器上的int类型的大小:

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)的所有数据类型的最终基类。对象是System.Object类的一个别名。所以,对象类型可以分配的任何其他类型的,值类型,引用类型,预定义或用户定义类型的值。然而,赋值之前,它需要类型转换。

当值类型被转换为对象的类型,它被称为装箱和在另一方面,当一个对象类型转换为一个值的类型,它被称为拆箱。

object obj;
obj = 100; // this is boxing

动态类型

可以存储任何类型的值在动态数据类型的变量中。类型检查这些类型的变量发生在运行时。

声明动态类型的语法是:

dynamic <variable_name> = value;

例如,

dynamic d = 20;

动态类型类似于对象除了对象类型变量的类型检查的类型发生在编译的时候,而对于动态类型的变量发生在运行时。

字符串类型

字符串类型,可以指定任何字符串值的变量。字符串类型是System.String类的别名。它是从对象类型派生。一个字符串类型的值可以以两种形式使用字符串分配:引用和@引用。

例如,

String str = "Yiibai Yiibai";

一个@引用字符串的样子:

@"Yiibai Yiibai";

用户定义的参考类型是:类,接口,或委托。我们将在后面的章节中讨论这些类型。

指针类型

指针类型变量存储的另一类型的存储器地址。在C#中的指针都具有相同的功能,用C或C++。

声明指针类型的语法是:

type* identifier;

例如,

char* cptr;
int* iptr;

我们将在第一章“不安全代码”讨论指针类型。