C# 零基础入门篇(1.基本数据类型详解)

C# 提供了一组丰富的基本数据类型(也称为 **内置类型**),这些类型是构建程序的基础。本文将详细解释 C# 中所有基本数据类型的特点、内存占用、取值范围及使用场景。

---

## 目录
1. [数据类型分类](#数据类型分类)
2. [值类型(Value Types)](#值类型value-types)
   - 2.1 [整数类型](#整数类型)
   - 2.2 [浮点类型](#浮点类型)
   - 2.3 [字符类型](#字符类型)
   - 2.4 [布尔类型](#布尔类型)
3. [引用类型(Reference Types)](#引用类型reference-types)
   - 3.1 [字符串类型](#字符串类型)
   - 3.2 [对象类型](#对象类型)
4. [默认值与初始化](#默认值与初始化)
5. [类型转换](#类型转换)
6. [注意事项](#注意事项)
7. [总结](#总结)

---

## 数据类型分类
C# 数据类型分为两大类:
| 类别         | 特点                     | 示例                       |
| ------------ | ------------------------ | -------------------------- |
| **值类型**   | 直接存储数据,分配在栈上 | `int`, `char`, `bool`      |
| **引用类型** | 存储数据地址,分配在堆上 | `string`, `object`, `数组` |

---

## 值类型(Value Types)

### 整数类型
| 类型名称     | 关键字   | 内存大小 | 取值范围                                                | 默认值 | 示例                              |
| ------------ | -------- | -------- | ------------------------------------------------------- | ------ | --------------------------------- |
| 有符号字节   | `sbyte`  | 1 字节   | -128 到 127                                             | 0      | `sbyte a = -10;`                  |
| 无符号字节   | `byte`   | 1 字节   | 0 到 255                                                | 0      | `byte b = 200;`                   |
| 短整型       | `short`  | 2 字节   | -32,768 到 32,767                                       | 0      | `short c = -3000;`                |
| 无符号短整型 | `ushort` | 2 字节   | 0 到 65,535                                             | 0      | `ushort d = 60000;`               |
| 整型         | `int`    | 4 字节   | -2,147,483,648 到 2,147,483,647                         | 0      | `int e = 1000000;`                |
| 无符号整型   | `uint`   | 4 字节   | 0 到 4,294,967,295                                      | 0      | `uint f = 3000000000;`            |
| 长整型       | `long`   | 8 字节   | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 0L     | `long g = -9000000000000000000;`  |
| 无符号长整型 | `ulong`  | 8 字节   | 0 到 18,446,744,073,709,551,615                         | 0      | `ulong h = 18000000000000000000;` |

**使用场景**:根据数值范围和内存需求选择,如 `int` 是最常用类型。

---

### 浮点类型
| 类型名称     | 关键字    | 内存大小 | 精度          | 默认值 | 示例                                  |
| ------------ | --------- | -------- | ------------- | ------ | ------------------------------------- |
| 单精度浮点数 | `float`   | 4 字节   | 约6-9位小数   | 0.0F   | `float a = 3.14F;`                    |
| 双精度浮点数 | `double`  | 8 字节   | 约15-17位小数 | 0.0D   | `double b = 3.1415926535;`            |
| 高精度小数   | `decimal` | 16 字节  | 28-29位小数   | 0.0M   | `decimal c = 1234567890.1234567890M;` |

**使用场景**:
- `float`:对性能敏感的低精度场景(如游戏开发)。
- `double`:通用科学计算(默认选择)。
- `decimal`:财务计算(避免舍入误差)。

---

### 字符类型
| 类型名称 | 关键字 | 内存大小 | 取值范围                         | 默认值 | 示例             |
| -------- | ------ | -------- | -------------------------------- | ------ | ---------------- |
| 字符     | `char` | 2 字节   | Unicode 字符(U+0000 到 U+FFFF) | '\0'   | `char ch = 'A';` |

**注意**:
- 使用单引号包裹字符:`'A'`。
- 支持转义字符:`'\n'`(换行)、`'\t'`(制表符)。

---

### 布尔类型
| 类型名称 | 关键字 | 内存大小 | 取值范围          | 默认值 | 示例                |
| -------- | ------ | -------- | ----------------- | ------ | ------------------- |
| 布尔值   | `bool` | 1 字节   | `true` 或 `false` | false  | `bool flag = true;` |

**注意**:
- C# 中布尔值不能隐式转换为整数(如 `0` 或 `1`)。

---

## 引用类型(Reference Types)

### 字符串类型
| 类型名称 | 关键字   | 默认值 | 示例                  |
| -------- | -------- | ------ | --------------------- |
| 字符串   | `string` | `null` | `string s = "Hello";` |

**特点**:
- 不可变性:字符串一旦创建,内容不可更改。
- 支持转义字符:`"C:\\Path"` 或逐字字符串 `@"C:\Path"`。

---

### 对象类型
| 类型名称 | 关键字   | 默认值 | 示例                |
| -------- | -------- | ------ | ------------------- |
| 对象     | `object` | `null` | `object obj = 100;` |

**特点**:
- 所有类型的基类,可存储任意数据(装箱/拆箱操作)。

---

## 默认值与初始化
- **值类型**:默认值为零或等价形式(如 `0`、`false`、`'\0'`)。
- **引用类型**:默认值为 `null`。

```csharp
int num;          // 默认值为 0
bool flag;        // 默认值为 false
string text;      // 默认值为 null
```

## 类型转换

### 隐式转换(自动)

csharp

```
int a = 100;
long b = a;      // 无需显式转换
```

### 显式转换(强制)

csharp

```
double x = 3.14;
int y = (int)x;   // 结果为 3(丢失精度)
```

### 方法转换

csharp

```
string s = "123";
int num = int.Parse(s);    // 字符串转整数
```

------

## 注意事项

1. **整数溢出**:使用 `checked` 关键字检测溢出。

   csharp

   ```
   checked {
       int max = int.MaxValue;
       max++;   // 抛出 OverflowException
   }
   ```

2. **浮点精度问题**:避免直接比较浮点数。

   csharp

   ```
   double a = 0.1 + 0.2;
   bool equal = (a == 0.3);   // 可能返回 false
   ```

3. **字符串操作**:频繁修改字符串时使用 `StringBuilder`。

------

## 总结

| 特性     | 值类型                          | 引用类型                 |
| :------- | :------------------------------ | :----------------------- |
| 存储位置 | 栈                              | 堆                       |
| 赋值行为 | 复制实际值                      | 复制引用地址             |
| 性能     | 高效(无垃圾回收开销)          | 需要垃圾回收             |
| 典型类型 | `int`, `double`, `bool`, `char` | `string`, `object`, 数组 |

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值