Getter 通常用于封装对字段的访问,以便对用户隐藏实现逻辑,使类更像是一个黑盒子。
私有 getter 只能被实现类的人(或使用反射来访问此字段的人)访问,因此它对于封装的用处不如以更方便的方式实现逻辑。
只读字段只能在构造函数或字段初始化器中设置(两者都在底层IL的构造函数中执行),而私有getter后面的变量可以随时设置。
只读值类型是不可变的,这意味着它在内存中保存的数据在构造函数执行后永远不会改变。
作为区别的例子:
private readonly immutableNum = 0; // this value will be always 0 (unless asigned something else in the constructor
private int num = 0; // this value can be changed anytime by internal logic in the class
private int Num
{
get { Console.WriteLine("Accessed num"); return num; } // additional logic implemented in the getter that can't be done in a readonly field,
//num can be set/reset anytime, so its value can change
}
private immutableGetterNum => 6; //this value will never change
那么,你想封装访问逻辑吗?然后你需要使用吸气剂。您是否需要确保分配给字段的值不会更改?然后使用只读字段(或没有基础字段的 getter)。