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
相关推荐
程序猿小D23 分钟前
Java项目:基于SSM框架实现的校园活动资讯网管理系统【ssm+B/S架构+源码+数据库+毕业论文+远程部署】
java·数据库·mysql·spring·毕业设计·ssm框架·校园活动
麦兜*24 分钟前
大模型时代,Transformer 架构中的核心注意力机制算法详解与优化实践
jvm·后端·深度学习·算法·spring·spring cloud·transformer
阿华的代码王国28 分钟前
【Android】PopupWindow实现长按菜单
android·xml·java·前端·后端
coding随想29 分钟前
算法界的“达摩克利斯之剑”——NP完全性理论
算法
找不到、了33 分钟前
关于MyBatis 的懒加载(Lazy Loading)机制
java·mybatis
啃火龙果的兔子1 小时前
快速搭建Java服务指南
java·开发语言
未来之窗软件服务1 小时前
智慧收银系统开发进销存库存统计,便利店、水果店、建材与家居行业的库存汇总管理—仙盟创梦IDE
java·开发语言·ide·进销存·仙盟创梦ide·东方仙盟·收银台
CodeCraft Studio1 小时前
国产化PDF处理控件Spire.PDF教程:Java 提取 PDF 图片,高质量提取与图片过滤技巧
java·python·pdf·国产化·文档处理·spire·pdf图片提取
秋难降1 小时前
栈:从基础概念到实战解题(详细)
数据结构·算法·排序算法
ezl1fe2 小时前
RAG 每日一技(十):向量检索的“死穴”?用混合搜索(Hybrid Search)来拯救!
后端·算法