跳转到内容

C Sharp 数据类型

来自代码酷

C#数据类型是C#编程语言中用于定义变量、常量或方法返回值的存储格式和操作规则的基础概念。数据类型决定了变量可以存储的值范围、占用的内存大小以及可执行的操作。C#的数据类型分为两大类:值类型(Value Types)和引用类型(Reference Types)。

数据类型分类[编辑 | 编辑源代码]

值类型(Value Types)[编辑 | 编辑源代码]

值类型直接存储数据值,分配在栈(Stack)内存中。包括:

  • 基本数据类型(如整数、浮点数、字符、布尔值)
  • 结构体(`struct`)
  • 枚举(`enum`)

引用类型(Reference Types)[编辑 | 编辑源代码]

引用类型存储数据的引用(内存地址),实际数据存储在堆(Heap)内存中。包括:

  • 类(`class`)
  • 接口(`interface`)
  • 数组(`array`)
  • 委托(`delegate`)
  • 字符串(`string`)

以下是一个简单的分类图表:

graph TD A[C#数据类型] --> B[值类型] A --> C[引用类型] B --> D[整数类型] B --> E[浮点类型] B --> F[字符类型] B --> G[布尔类型] B --> H[结构体] B --> I[枚举] C --> J[类] C --> K[接口] C --> L[数组] C --> M[委托] C --> N[字符串]

基本值类型[编辑 | 编辑源代码]

以下是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 truefalse 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#支持隐式转换(自动)和显式转换(强制):

  • 隐式转换:小范围类型到大范围类型(如 intlong)。
  • 显式转换:大范围类型到小范围类型(需使用强制转换语法)。
  
// 隐式转换  
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  

总结[编辑 | 编辑源代码]

  • 值类型直接存储数据,引用类型存储数据地址。
  • 基本值类型包括整数、浮点数、字符和布尔值。
  • 引用类型包括类、字符串、数组等。
  • 类型转换需注意数据范围和精度损失。

掌握C#数据类型是编写高效、安全代码的基础。后续可进一步学习C#类型系统内存管理等高级主题。