C# 关键字(Static/Const/Readonly)

本文详细解释了Static、Const和Readonly三种变量的区别。Static定义的是可以在外部改变其值的静态变量;Const定义的是编译时常量,在对象初始化时赋值且不可更改;Readonly则为只读变量,可在类初始化时修改其值。
C#中,`readonly` 关键字通常用于类的属性或字段,使用了 `readonly` 的属性或字段,只能在定义时或类的构造函数中初始化,除此之外不可以再修改它的值 [^3]。以下从不同方面介绍其使用方法: ### 只读字段 使用 `readonly` 声明一个只读字段时,必须在字段定义时或在构造函数中初始化它的值。示例代码如下: ```csharp public class MyClass { public readonly int myReadonlyField; public MyClass(int value) { myReadonlyField = value; } } ``` 在这个例子中,`myReadonlyField` 是一个只读字段,它在构造函数中被初始化。一旦初始化后,在其他地方就不能再修改它的值了 [^4]。 ### 只读字段与常量的区别 常量(使用 `const` 关键字定义)只能在声明的同时初始化(赋值),而 `readonly` 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,`readonly` 字段可能具有不同的值。示例代码如下: ```csharp public class SamplePoint { public int x; // 初始化一个只读字段 public readonly int y = 25; public readonly int z; public SamplePoint() { // 初始化一个只读实例字段 z = 24; } public SamplePoint(int p1, int p2, int p3) { x = p1; y = p2; z = p3; } public static void Main() { SamplePoint p1 = new SamplePoint(11, 21, 32); // OK Console.WriteLine($"p1: x={p1.x}, y={p1.y}, z={p1.z}"); SamplePoint p2 = new SamplePoint(); p2.x = 55; // OK Console.WriteLine($"p2: x={p2.x}, y={p2.y}, z={p2.z}"); } } ``` 上述代码展示了 `readonly` 字段可以根据不同的构造函数有不同的值,而常量是不能这样操作的 [^1]。 ### 静态只读字段 `const` 与 `static readonly` 基本相似,但是在初始化方面,`static readonly` 还可以通过静态构造函数进行赋值。`const` 在程序编译期间获取字段的值,而 `static readonly` 是在程序运行时获取字段的值。示例代码如下: ```csharp public class Person { public static readonly int age = 10; public Person() { // age = 10; } } class Program { static void Main(string[] args) { Person a = new Person(); Console.WriteLine(Person.age); } } ``` 此代码展示了 `static readonly` 字段的使用,它可以在静态构造函数中赋值,并且在运行时获取值 [^5]。 ### 作用 如果你希望一个数据成员在初始化后不能被改变,可以使用 `readonly` 关键字 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值