C# - 数据类型


C# 中的变量分为以下类型 -

  • 值类型
  • 参考类型
  • 指针类型

值类型

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

值类型直接包含数据。一些示例是int、char 和 float,它们分别存储数字、字母和浮点数。当您声明int类型时,系统会分配内存来存储该值。

下表列出了 C# 2010 中可用的值类型 -

类型 代表 范围 默认值
布尔值 布尔值 对或错 错误的
字节 8 位无符号整数 0 至 255 0
字符 16 位 Unicode 字符 U +0000 至 U +ffff '\0'
小数 128 位精确十进制值,有效数字 28-29 位 (-7.9 x 10 28至 7.9 x 10 28 ) / 10 0至 28 0.0M
双倍的 64位双精度浮点类型 (+/-)5.0 x 10 -324至 (+/-)1.7 x 10 308 0.0D
漂浮 32位单精度浮点型 -3.4 x 10 38至 + 3.4 x 10 38 0.0F
整数 32 位有符号整数类型 -2,147,483,648 至 2,147,483,647 0
长的 64 位有符号整数类型 -9,223,372,036,854,775,808 至 9,223,372,036,854,775,807 0升
斯字节 8 位有符号整数类型 -128 至 127 0
短的 16 位有符号整数类型 -32,768 至 32,767 0
单位 32 位无符号整数类型 0 至 4,294,967,295 0
乌龙 64 位无符号整数类型 0 至 18,446,744,073,709,551,615 0
超短 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

参考类型

引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用。

换句话说,它们指的是内存位置。使用多个变量,引用类型可以引用内存位置。如果内存位置中的数据被其中一个变量更改,则另一个变量会自动反映这一值的变化。内置引用类型的示例有:objectdynamicstring

对象类型

对象类型是 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";

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

指针类型

指针类型变量存储另一种类型的内存地址。C# 中的指针与 C 或 C++ 中的指针具有相同的功能。

声明指针类型的语法是 -

type* identifier;

例如,

char* cptr;
int* iptr;

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