Visual Studio中的常量和只读变量

目录

一、常量

1.说明

2.使用模板

3.实例

4.特点

5.注意事项

二、只读变量

1.说明

2.使用模板

3.实例

4.特点

5.注意事项

三、二者核心区别

四、总结


一、常量

1.说明

编译时常量,在编译阶段确定值,且运行时无法修改

2.使用模板

//语法:访问修饰符 const 类型 常量名 = 值;

public const int MaxValue = 100;

private const string AppName = "MyApp";

3.实例

class Example

{

// 类级常量(静态)

public const double Pi = 3.14159;

public void Calculate()

{

// 局部常量(方法内)

const int Factor = 2; double area = Pi * Factor * Factor;

}

}

4.特点

编译时确定:值嵌入程序集元数据,运行时不可改变。

静态特性:默认静态,无需显示加static。

适用类型:仅支持值类型(int、double等)和字符串(string)。

5.注意事项

必须在声明时初始化,且值必须是编译时常量(如字面量、枚举值)。

不可用于引用类型。

二、只读变量

1.说明

运行时常量,仅可在声明时或构造函数中赋值,对象创建后不可修改。

2.使用模板

//语法:访问修饰符 readonly 类型 变量名;

public readonly int Id;

private static readonly DateTime InitTime;

3.实例

class User

{

// 实例只读变量(每个对象独立)

public readonly string Name;

// 静态只读变量(类共享)

public static readonly string Version;

// 静态构造函数初始化静态只读变量

static User()

{

Version = "1.0.0";

}

// 实例构造函数初始化实例只读变量

public User(string name)

{

Name = name; // 仅此处可赋值

}

}

4.特点

运行时稳定:值可在构造函数中动态赋值。

实例 / 静态可选:可修饰实例成员或静态成员。

适用类型:支持所有类型(值类型、引用类型、自定义类等)。

5.注意事项

静态只读变量 需要在静态构造函数中初始化实例只读变量 需要在实例构造函数或声明时初始化

引用类型的只读变量,其引用地址可以不变,但对象内部状态可以修改(如readonly List<int> list = new List<int>(); list.Add(1);是允许的)。

三、二者核心区别

|-----------|------------------------|--------------------------------|
| 对比维度 | const(常量) | readonly(只读变量) |
| 初始化时机 | 编译时(声明时必须赋值) | 运行时(声明时或构造函数中赋值) |
| 修改特性 | 完全不可修改 | 对象创建后不可修改,但且只能在构造函数中可以动态赋值 |
| 静态特性 | 默认静态,无需添加static关键字 | 需要显式加static修饰静态只读变量 |
| 适用类型 | 仅值类型、字符串 | 所有类型(值类型、引用类型、自定义类等) |
| 内存存储 | 存储在程序集元数据中 | 存储在对象实例或静态存储区 |
| 动态赋值 | 不支持(值必须是编译时常量) | 支持(构造函数中可依赖外部参数) |

四、总结

优先使用const的情况:值固定且无需动态计算(如数学常量、固定配置)。

优先使用readonly的情况:值需动态生成(如依赖构造参数、静态初始化逻辑)或需支持引用类型。

相关推荐
郝学胜_神的一滴17 分钟前
C++11 工程级应用 12:编译期类型魔法,干掉重复与臃肿的代码
c++·visual studio
David猪大卫2 小时前
【C++修炼】哈希表的实现
数据结构·c++·笔记·学习·算法·哈希算法·散列表
江湖人称菠萝包2 小时前
【Windows】《深入浅出Windows API程序设计:核心编程篇》笔记-Chapter6-动态链接库
windows·笔记
宵时待雨2 小时前
linux笔记归纳18:传输层协议TCP
linux·网络·笔记·网络协议·tcp/ip
逆境不可逃3 小时前
Pi Agent 学习笔记:一次提问背后的工具调用循环
java·笔记·学习
Ztt6666666663 小时前
紫釉高筒壶向上收紧,修长器身更显精神
经验分享·笔记·其他·百度·微信公众平台
疯狂打码的少年3 小时前
【计算机网络】UDP协议与TCP/UDP对比(面向连接vs无连接)
笔记·tcp/ip·计算机网络·udp
水饺编程4 小时前
第5章,[Win32 章节] :在平面直角坐标系中描点
c语言·c++·windows·visual studio
XiaoZhenHua984 小时前
C#工业机器视觉Recipe配方系统设计:多型号、多相机、多工位参数如何统一管理
c#·软件架构·机器视觉·工业自动化·工业软件·recipe
巧克力味的桃子4 小时前
模拟大厂大模型方向面试题
笔记