c#数据类型
时间: 2025-05-24 09:57:03 浏览: 8
### C# 编程语言中的数据类型
C# 是一种强类型的语言,这意味着在编译时就必须知道变量的具体类型。C# 中的数据类型分为两大类:值类型(Value Types)和引用类型(Reference Types)。以下是详细的分类及其用法。
#### 值类型 (Value Types)
值类型表示存储实际数据的变量。它们直接包含其数据,并且当将一个值类型变量分配给另一个变量时,会复制该值的一个副本[^3]。
##### 简单类型
简单类型是最基本的值类型,用于表示整数、浮点数、布尔值等原始数据。常见的简单类型如下:
| 类型 | 关键字 | 大小 | 范围 |
|------------|-----------|--------------|----------------------------------------|
| 整数类型 | `int` | 4 字节 | -2,147,483,648 到 2,147,483,647 |
| 长整型 | `long` | 8 字节 | -9,223,372,036,854,775,808 到 ... |
| 浮点类型 | `float` | 4 字节 | ±(约)1.5 × 10^-45 至 ±3.4 × 10^38 |
| 双精度类型 | `double` | 8 字节 | ±5.0 × 10^-324 至 ±1.7 × 10^308 |
| 布尔类型 | `bool` | 不固定大小 | `true` 或 `false` |
示例代码:
```csharp
int number = 10;
float price = 19.99f;
bool isAvailable = true;
```
##### 枚举类型 (`enum`)
枚举是一种特殊的价值类型,它定义了一组命名常量。通过使用枚举,可以使程序更具可读性和安全性。
```csharp
public enum Days { Sunday, Monday, Tuesday };
Days day = Days.Monday;
Console.WriteLine(day); // 输出 Monday
```
##### 结构体 (`struct`)
结构体允许开发者创建自己的复杂价值类型。尽管它可以像类一样拥有字段和方法,但它属于值类型而非引用类型。
```csharp
public struct Point {
public int X;
public int Y;
public Point(int x, int y) {
this.X = x;
this.Y = y;
}
}
Point p = new Point(1, 2);
Console.WriteLine($"X={p.X}, Y={p.Y}");
```
#### 引用类型 (Reference Types)
引用类型不直接存储数据本身,而是存储指向堆内存中对象的指针。因此,在将引用类型变量赋值给其他变量时,实际上只是传递了对该对象的引用[^3]。
常见引用类型包括但不限于以下几种:
- **字符串 (`string`)**
表示不可变字符序列的对象。
```csharp
string greeting = "Hello";
Console.WriteLine(greeting.ToUpper()); // HELLO
```
- **数组 (`Array`)**
数组是一系列具有相同类型的元素集合。可以通过索引来访问这些元素。
```csharp
int[] numbers = { 1, 2, 3 };
foreach (var num in numbers) {
Console.Write(num + " "); // 输出 1 2 3
}
```
- **泛型集合 (`List<T>`, `Dictionary<TKey,TValue>`)**
提供更安全灵活的方式来管理动态数量的数据项。
```csharp
using System.Collections.Generic;
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
Dictionary<string, int> dict = new Dictionary<string, int>();
dict["one"] = 1;
Console.WriteLine(dict.ContainsKey("one")); // True
```
- **类 (`class`)**
定义了一个蓝图,用来描述如何构建特定种类的对象实例。
```csharp
class Person {
public string Name { get; set; }
public void SayHello() => Console.WriteLine($"Hello from {Name}!");
}
var person = new Person { Name = "Alice" };
person.SayHello(); // Hello from Alice!
```
#### 可空类型 (`Nullable<T>`)
对于某些场景下可能需要处理缺失或未知的情况,这时就可以利用可空类型。无论是采用显式形式还是简洁语法都可以实现这一目标[^2]。
```csharp
// 显式方式
Nullable<bool> flag = null;
// 使用问号简化版
bool? anotherFlag = null;
if (!anotherFlag.HasValue || !anotherFlag.Value) {
Console.WriteLine("The value is either false or not present.");
}
```
---
阅读全文
相关推荐















