C# Readonly使用

本文探讨C#的readonly关键字,它允许对象在构造函数中初始化,但禁止后续修改引用。然而,这并不阻止内部对象的修改。了解此特性对于优化代码的不变性和安全性至关重要。
### C# 中 `readonly` 的使用说明与示例代码 #### 1. 定义与作用 `readonly` 是 C# 中的关键字,用于声明只读字段。一旦初始化完成,该字段的值在程序运行时不允许被修改[^1]。`readonly` 字段只能在声明时或构造函数中进行赋值。 #### 2. 使用规则 - **声明时初始化**:可以在声明时直接为 `readonly` 字段赋值。 - **构造函数中初始化**:如果未在声明时赋值,则必须在构造函数中对其进行初始化。 - **不可重新赋值**:除了上述两种情况外,`readonly` 字段的值不能被修改。 #### 3. 示例代码 以下是一个完整的示例,展示如何使用 `readonly`: ```csharp using System; namespace ReadOnlyExample { public class ReadOnlyDemo { // 在声明时初始化 readonly 字段 private readonly string _code = "Default Code"; // 构造函数中初始化 readonly 字段 private readonly int _number; public ReadOnlyDemo(string code, int number) { _code = code; // 可以在构造函数中重新赋值 _number = number; } public void Display() { Console.WriteLine($"Code: {_code}, Number: {_number}"); // _code = "New Code"; // 编译错误:无法分配给只读字段 } } class Program { static void Main(string[] args) { ReadOnlyDemo demo = new ReadOnlyDemo("Sample Code", 42); demo.Display(); } } } ``` #### 4. 注意事项 - 如果 `readonly` 字段是引用类型,则字段本身不可更改,但字段所引用的对象的内容可以被修改[^4]。 - 示例代码如下: ```csharp public class Example { private readonly StringBuilder _text; public Example() { _text = new StringBuilder("Initial Text"); } public void ModifyText() { _text.Append(" More Text"); // 允许修改对象内容 // _text = new StringBuilder("New Text"); // 编译错误:无法分配给只读字段 } } ``` #### 5. 与 `const` 的区别 - **`const`**:必须在编译时确定值,并且属于类级别,不能在实例构造函数中赋值。 - **`readonly`**:可以在运行时通过构造函数初始化,属于实例级别[^3]。 #### 6. 多线程环境下的行为 `readonly` 并不保证线程安全。如果需要确保线程安全,应结合其他机制(如锁)来保护数据完整性[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值