C# 常量与变量

在 C# 中,常量和变量是存储数据的基本方式:

复制代码
// 常量:使用 const 关键字声明,必须在声明时初始化,且值不能改变
const double Pi = 3.14159;
const string Message = "Hello, World!";
​
// 变量:存储可以变化的值,需要先声明类型,再赋值
int age;         // 声明整型变量
age = 30;        // 赋值
string name = "John";  // 声明并初始化

C# 数据类型

C# 中的数据类型分为两大类:

值类型

值类型直接存储数据的值,分配在栈上,包括:

cs 复制代码
// 整数类型
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字符
引用类型

引用类型存储对数据的引用(内存地址),分配在堆上,包括:

cs 复制代码
// 字符串类型
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)是一种值类型,用于定义一组命名的常量:

cs 复制代码
// 定义枚举类型
enum DaysOfWeek
{
    Monday,      // 默认值为0
    Tuesday,     // 1
    Wednesday,   // 2
    Thursday,    // 3
    Friday,      // 4
    Saturday,    // 5
    Sunday       // 6
}
​
// 使用枚举
DaysOfWeek today = DaysOfWeek.Monday;
Console.WriteLine(today);  // 输出: Monday

类型转换

类型转换分为隐式转换和显式转换:

cs 复制代码
// 隐式转换:从小范围类型到大范围类型(安全转换)
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 值,适用于可能没有值的场景:

cs 复制代码
// 声明可空值类型
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
相关推荐
2501_924952695 分钟前
C++模块化编程指南
开发语言·c++·算法
qzhqbb5 分钟前
差分隐私与大模型+差分隐私在相关领域应用的论文总结
人工智能·算法
2401_831920749 分钟前
基于C++的爬虫框架
开发语言·c++·算法
我是咸鱼不闲呀9 分钟前
力扣Hot100系列22(Java)——[图论]总结(岛屿数量,腐烂的橘子,课程表,实现Trie(前缀树))
java·leetcode·图论
1104.北光c°10 分钟前
深入浅出 Elasticsearch:从搜索框到精准排序的架构实战
java·开发语言·elasticsearch·缓存·架构·全文检索·es
MSTcheng.15 分钟前
【优选算法必修篇——位运算】『面试题 01.01. 判定字符是否唯一&面试题 17.19. 消失的两个数字』
java·算法·面试
weixin_4219226916 分钟前
模板元编程性能分析
开发语言·c++·算法
蹦哒17 分钟前
Kotlin 与 Java 语法差异
java·python·kotlin
2401_8512729918 分钟前
C++中的类型擦除技术
开发语言·c++·算法
左左右右左右摇晃18 分钟前
Java并发——并发编程底层原理
java·开发语言