摘要:在 C# 中,**只读变量(readonly)**的核心特性就是一旦初始化后,它的值在对象的生命周期内(对于实例字段)或应用程序的生命周期内(对于静态字段)都不能被修改。以下是如何保证只读变量的值不被修改的具体机制和实现方式:
在 C# 中,**只读变量(readonly)**的核心特性就是一旦初始化后,它的值在对象的生命周期内(对于实例字段)或应用程序的生命周期内(对于静态字段)都不能被修改。以下是如何保证只读变量的值不被修改的具体机制和实现方式:
只读变量可以通过以下两种方式赋值:
在声明时赋值。在类的构造函数中赋值。赋值后,它的值将不可再更改。
示例:
public class ReadonlyExample{public readonly int ReadonlyValue; // 实例只读字段public static readonly string StaticReadonlyValue; // 静态只读字段// 静态构造函数初始化静态只读字段static ReadonlyExample{StaticReadonlyValue = "Initialized in static constructor";}// 构造函数初始化实例只读字段public ReadonlyExample(int value){ReadonlyValue = value;}}在上面的代码中:
ReadonlyValue 只能在构造函数中被赋值。StaticReadonlyValue 只能在静态构造函数或声明时被赋值。编译器会确保只读字段只能在以下位置赋值:
声明时赋值:public readonly int ReadonlyValue = 42;在构造函数或静态构造函数中赋值:public ReadonlyExample(int value) { ReadonlyValue = value; // 仅能在构造函数内赋值 }如果试图在其他地方修改 readonly 字段的值,编译器会报错。例如:
public void UpdateReadonlyValue(int newValue){ReadonlyValue = newValue; // 编译错误:Cannot assign to 'ReadonlyValue' because it is readonly}声明时:public static readonly string StaticField = "Initialized";静态构造函数:static ReadonlyExample { StaticField = "Initialized in static constructor"; }一旦静态只读字段的值被初始化,就不能再更改。
const 是编译期常量,必须在编译时指定值,值在使用处会被内联到代码中。readonly 的值可以在运行时通过构造函数初始化,但在初始化后不能再被修改。数据库连接字符串:值可能来自配置文件,在运行时初始化,但之后不允许更改。应用程序的只读设置:在初始化时读取某些值并确保运行时不可变。示例:
public class Configuration{public readonly string ConnectionString;public Configuration(string connectionString){ConnectionString = connectionString; // 初始化后不允许更改}}只能在声明时或通过构造函数初始化。编译器会强制阻止在其他位置对其重新赋值。静态只读字段只能在静态构造函数或声明时赋值。来源:面试八股文
免责声明:本站系转载,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!