const和readonly在C#中有什么区别?何时使用哪个?
大家好!我开始学习C#,遇到了两个看起来很相似的修饰符:`const`和`readonly`。我知道它们都让变量不可变,但感觉它们之间应该有一些我忽略的根本区别。
下面是我写的一个简单示例:
```csharp
public class MyClass
{
public const int MyConst = 10;
public readonly int MyReadonly = 20;
public MyClass()
{
MyReadonly = 30; // 这可以工作
// MyConst = 40; // 错误:常量不能修改
}
public void SomeMethod()
{
// MyReadonly = 50; // 错误:readonly字段只能在构造函数中修改
}
}
```
我看到`readonly`字段可以在构造函数中修改,而`const`不行。但还有其他区别吗?例如,我听说`const`本质上是静态的,而`readonly`对于不同实例可以不同。这在编译层面是如何工作的?