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
相关推荐
virus594516 小时前
悟空CRM mybatis-3.5.3-mapper.dtd错误解决方案
java·开发语言·mybatis
一匹电信狗16 小时前
【LeetCode_547_990】并查集的应用——省份数量 + 等式方程的可满足性
c++·算法·leetcode·职场和发展·stl
鱼跃鹰飞17 小时前
Leetcode会员尊享100题:270.最接近的二叉树值
数据结构·算法·leetcode
没差c18 小时前
springboot集成flyway
java·spring boot·后端
时艰.18 小时前
Java 并发编程之 CAS 与 Atomic 原子操作类
java·开发语言
梵刹古音18 小时前
【C语言】 函数基础与定义
c语言·开发语言·算法
编程彩机18 小时前
互联网大厂Java面试:从Java SE到大数据场景的技术深度解析
java·大数据·spring boot·面试·spark·java se·互联网大厂
笨蛋不要掉眼泪18 小时前
Spring Boot集成LangChain4j:与大模型对话的极速入门
java·人工智能·后端·spring·langchain
筵陌18 小时前
算法:模拟
算法
Yvonne爱编码18 小时前
JAVA数据结构 DAY3-List接口
java·开发语言·windows·python