C# 提供了一系列的数据类型,这些数据类型大致可以分为两类:值类型(Value Types)和引用类型(Reference Types)。
值类型(Value Types)
值类型直接包含数据,当创建值类型变量时,会在栈(Stack)上分配内存,并且变量的值是直接存储在那块内存中的。值类型包括以下几种:
- 简单值类型(Simple Value Types)
- 整型(Integer Types):byte, sbyte, short, ushort, int, uint, long, ulong
- 浮点型(Floating-Point Types):float, double, decimal
- 字符型(Character Types):char
- 布尔型(Boolean Type):bool
- 结构体(Struct Types)
结构体是一种值类型,可以包含多个不同类型的字段。结构体的实例在栈上分配内存。 - 枚举(Enumeration Types)
枚举类型是一种值类型,它定义了一个命名的整数集合。枚举的基础类型可以是 byte, sbyte, short, ushort, int, uint, long, 或 ulong。 - 可空类型(Nullable Types)
可空类型表示一个值类型可以是该类型的值,也可以是 null。例如,int? 是一个可空的整型。
引用类型(Reference Types)
引用类型不直接包含数据,而是存储对数据的引用。当创建引用类型变量时,会在堆(Heap)上分配内存,而变量本身存储的是对堆上数据的引用。引用类型包括以下几种:
- 类(Class Types)
类是引用类型的核心,可以包含字段、属性、方法和事件等成员。类的实例在堆上分配内存。 - 接口(Interface Types)
接口定义了一组方法、属性、索引器和事件的签名,但不包含实现。实现接口的类必须提供这些成员的具体实现。 - 数组(Array Types)
数组是一种引用类型,用于存储同一类型的多个元素。数组的元素可以是值类型或引用类型。 - 委托(Delegate Types)
委托是一种类型安全的函数指针,用于封装方法的引用,并允许将方法作为参数传递或赋值给变量。 - 字符串(String Types)
string 类型是一个特殊的引用类型,用于表示文本数据。字符串是不可变的,这意味着一旦创建了字符串对象,就不能更改其内容。 - 泛型类型(Generic Types)
泛型类型允许你定义可以操作任何数据类型的类、接口、方法或委托,同时保持类型安全。例如,List<T> 是一个泛型集合类,可以存储任何类型 T 的元素。
在C#中,每种数据类型都有其特定的用途和行为,选择正确的数据类型对于编写高效、可维护的代码至关重要。值类型通常用于存储小块的、简单的数据,而引用类型则用于存储更复杂的数据结构和对象。