在 C# 中,常量和变量是存储数据的基本方式:
// 常量:使用 const 关键字声明,必须在声明时初始化,且值不能改变
const double Pi = 3.14159;
const string Message = "Hello, World!";
// 变量:存储可以变化的值,需要先声明类型,再赋值
int age; // 声明整型变量
age = 30; // 赋值
string name = "John"; // 声明并初始化
C# 数据类型
C# 中的数据类型分为两大类:
值类型
值类型直接存储数据的值,分配在栈上,包括:
// 整数类型
byte b = 255; // 无符号8位整数 (0-255)
short s = 32767; // 16位整数
int num = 123456; // 32位整数
long bigNum = 1234567890123; // 64位整数
// 浮点类型
float f = 3.14f; // 单精度浮点数,需加后缀 f
double d = 3.14159; // 双精度浮点数
// 布尔类型
bool isActive = true;
// 字符类型
char c = 'A'; // 存储单个Unicode字符
引用类型
引用类型存储对数据的引用(内存地址),分配在堆上,包括:
// 字符串类型
string text = "Hello"; // 不可变的字符序列
// 对象类型
object obj = 123; // 可以引用任何类型的对象
// 数组类型
int[] numbers = {1, 2, 3, 4, 5}; // 存储相同类型的多个元素
值类型和引用类型的区别
区别 | 值类型 | 引用类型 |
---|---|---|
存储方式 | 直接存储值 | 存储对值的引用 |
内存位置 | 栈(Stack) | 堆(Heap) |
复制行为 | 复制值本身 | 复制引用(指向同一对象) |
默认值 | 例如:int 默认值为 0 | 默认为 null |
示例类型 | int , bool , struct | string , object , array |
枚举类型
枚举(enum
)是一种值类型,用于定义一组命名的常量:
// 定义枚举类型
enum DaysOfWeek
{Monday, // 默认值为0Tuesday, // 1Wednesday, // 2Thursday, // 3Friday, // 4Saturday, // 5Sunday // 6
}
// 使用枚举
DaysOfWeek today = DaysOfWeek.Monday;
Console.WriteLine(today); // 输出: Monday
类型转换
类型转换分为隐式转换和显式转换:
// 隐式转换:从小范围类型到大范围类型(安全转换)
int a = 100;
long b = a; // int 可以隐式转换为 long
// 显式转换(强制转换):从大范围类型到小范围类型(可能丢失数据)
double x = 3.14;
int y = (int)x; // 输出: 3(截断小数部分)
// 转换方法
string numStr = "123";
int num = int.Parse(numStr); // 字符串转整数
bool success = int.TryParse(numStr, out int result); // 安全转换
// 引用类型转换
object obj = "Hello";
string str = (string)obj; // 强制转换
string safeStr = obj as string; // 安全转换(失败返回 null)
可空类型
可空类型允许值类型存储 null
值,适用于可能没有值的场景:
// 声明可空值类型
int? nullableInt = null; // int 类型可空
DateTime? nullableDate = null; // DateTime 类型可空
// 使用可空类型
if (nullableInt.HasValue)
{Console.WriteLine(nullableInt.Value); // 获取值
}
else
{Console.WriteLine("Value is null");
}
// 空合并运算符(??)
int value = nullableInt ?? 0; // 如果 nullableInt 为 null,则返回 0