只读
readonly
关键字是字段修饰符。当字段声明包含 readonly
修饰符时,对该字段的赋值只能作为声明的一部分或在同一个类的构造函数中出现。
readonly
关键字与 const
关键字不同。const
字段只能在字段声明时初始化。可以在声明或构造函数中初始化 readonly
字段。因此,readonly
字段可以具有不同的值,具体取决于所使用的构造函数。
注入依赖项时经常使用 readonly
关键字。
class Person
{
readonly string _name;
readonly string _surname = "Surname";
Person(string name)
{
_name = name;
}
void ChangeName()
{
_name = "another name"; // Compile error
_surname = "another surname"; // Compile error
}
}
注意: 只读声明字段并不意味着不可变性。如果该字段是*引用类型,*则可以更改对象的内容。 Readonly 通常用于防止仅在实例化该对象期间覆盖和分配对象。 ****
注意:在构造函数内部,可以重新分配只读字段
public class Car
{
public double Speed {get; set;}
}
//In code
private readonly Car car = new Car();
private void SomeMethod()
{
car.Speed = 100;
}