C Sharp 数据类型
外观
C#数据类型是C#编程语言中用于定义变量、常量或方法返回值的存储格式和操作规则的基础概念。数据类型决定了变量可以存储的值范围、占用的内存大小以及可执行的操作。C#的数据类型分为两大类:值类型(Value Types)和引用类型(Reference Types)。
数据类型分类[编辑 | 编辑源代码]
值类型(Value Types)[编辑 | 编辑源代码]
值类型直接存储数据值,分配在栈(Stack)内存中。包括:
- 基本数据类型(如整数、浮点数、字符、布尔值)
- 结构体(`struct`)
- 枚举(`enum`)
引用类型(Reference Types)[编辑 | 编辑源代码]
引用类型存储数据的引用(内存地址),实际数据存储在堆(Heap)内存中。包括:
- 类(`class`)
- 接口(`interface`)
- 数组(`array`)
- 委托(`delegate`)
- 字符串(`string`)
以下是一个简单的分类图表:
基本值类型[编辑 | 编辑源代码]
以下是C#中常用的基本值类型及其范围和默认值:
类型 | 关键字 | 大小(字节) | 范围 | 默认值 |
---|---|---|---|---|
有符号8位整数 | sbyte |
1 | -128 到 127 | 0 |
无符号8位整数 | byte |
1 | 0 到 255 | 0 |
有符号16位整数 | short |
2 | -32,768 到 32,767 | 0 |
无符号16位整数 | ushort |
2 | 0 到 65,535 | 0 |
有符号32位整数 | int |
4 | -2,147,483,648 到 2,147,483,647 | 0 |
无符号32位整数 | uint |
4 | 0 到 4,294,967,295 | 0 |
有符号64位整数 | long |
8 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 0L |
无符号64位整数 | ulong |
8 | 0 到 18,446,744,073,709,551,615 | 0UL |
单精度浮点数 | float |
4 | ±1.5 × 10⁻⁴⁵ 到 ±3.4 × 10³⁸ | 0.0F |
双精度浮点数 | double |
8 | ±5.0 × 10⁻³²⁴ 到 ±1.7 × 10³⁰⁸ | 0.0D |
十进制高精度数 | decimal |
16 | ±1.0 × 10⁻²⁸ 到 ±7.9 × 10²⁸ | 0.0M |
Unicode字符 | char |
2 | U+0000 到 U+FFFF | '\0' |
布尔值 | bool |
1 | true 或 false |
false
|
代码示例[编辑 | 编辑源代码]
以下示例展示如何声明和使用基本值类型:
// 整数类型
int age = 25;
long population = 7_900_000_000;
// 浮点类型
float temperature = 36.5f;
double pi = 3.1415926535;
decimal price = 19.99m;
// 字符和布尔类型
char grade = 'A';
bool isActive = true;
// 输出示例
Console.WriteLine($"Age: {age}, Population: {population}");
Console.WriteLine($"Temperature: {temperature}, Pi: {pi}, Price: {price}");
Console.WriteLine($"Grade: {grade}, Is Active: {isActive}");
输出:
Age: 25, Population: 7900000000 Temperature: 36.5, Pi: 3.1415926535, Price: 19.99 Grade: A, Is Active: True
引用类型示例[编辑 | 编辑源代码]
引用类型的变量存储的是对象的引用,而非实际数据。以下是字符串和数组的示例:
// 字符串(引用类型)
string name = "Alice";
string message = "Hello, " + name;
// 数组(引用类型)
int[] numbers = { 1, 2, 3, 4, 5 };
// 输出
Console.WriteLine(message);
Console.WriteLine($"First number: {numbers[0]}");
输出:
Hello, Alice First number: 1
类型转换[编辑 | 编辑源代码]
C#支持隐式转换(自动)和显式转换(强制):
- 隐式转换:小范围类型到大范围类型(如
int
到long
)。 - 显式转换:大范围类型到小范围类型(需使用强制转换语法)。
// 隐式转换
int num = 100;
long bigNum = num;
// 显式转换
double preciseValue = 9.87;
int roundedValue = (int)preciseValue;
Console.WriteLine($"Long number: {bigNum}, Rounded value: {roundedValue}");
输出:
Long number: 100, Rounded value: 9
实际应用案例[编辑 | 编辑源代码]
场景:用户输入验证[编辑 | 编辑源代码]
在表单处理中,数据类型用于验证用户输入是否符合预期格式:
Console.Write("Enter your age: ");
string input = Console.ReadLine();
if (int.TryParse(input, out int userAge))
{
Console.WriteLine($"Valid age: {userAge}");
}
else
{
Console.WriteLine("Invalid input! Age must be an integer.");
}
场景:财务计算[编辑 | 编辑源代码]
高精度计算(如货币)需使用 decimal
类型以避免浮点误差:
decimal total = 0m;
total += 1.99m;
total += 2.49m;
Console.WriteLine($"Total cost: {total:C}"); // 输出格式化为货币
输出:
Total cost: $4.48
总结[编辑 | 编辑源代码]
- 值类型直接存储数据,引用类型存储数据地址。
- 基本值类型包括整数、浮点数、字符和布尔值。
- 引用类型包括类、字符串、数组等。
- 类型转换需注意数据范围和精度损失。