c# - 只读字段和私有 getter 属性之间的区别
问题描述
您好,我对只读字段和私有 getter 属性之间的区别感到非常困惑。我见过人们在他们的代码中同时使用这两种方法,但我根本不明白是什么让它们与众不同。
private readonly int num = 0;
// or //
private int Num
{
get { return num; }
}
那么使用其中任何一种是否有区别,或者是某人的偏好?我仍然是 C# 的初学者,并且我对 python 有一些经验,所以如果这是一个愚蠢的问题,我深表歉意。:-)
解决方案
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
那么,要封装访问逻辑吗?然后你需要使用吸气剂。您是否需要确保分配给字段的值不会更改?然后使用只读字段(或没有基础字段的吸气剂)。
推荐阅读
- javascript - 如何解决 noscript - 在为 Vue 应用程序提供服务时,如果没有启用 JavaScript,则无法正常工作
- c# - 为什么调用远程对象时不能使用异步函数?
- excel - 输入框能实现这种查找吗?
- ionic-framework - 使用appium将文本输入到离子混合应用程序输入字段的预期方式是什么?sendkeys:无法聚焦元素
- mysql - 为什么 mysql_secure_installation 从不工作?
- ios - 需要帮助在 iOS 日历 (Swift) 中的事件中保存唯一的自定义标识符
- c# - Visual Studio 2019 检查 NullableContextOptions
- reactjs - 当 React 组件在 Typescript 中具有强制性道具时,将其作为道具注入
- php - 根据 WooCommerce 中的运输类别自定义计算的运输成本
- sql - 按时间戳差异分组时性能不佳