繁体   English   中英

只读字段和私有 getter 属性之间的区别

[英]Difference Between readonly field and private getter property

您好,我对只读字段和私有 getter 属性之间的区别感到非常困惑。 我见过人们在他们的代码中同时使用这两种方法,但我根本不明白是什么让它们与众不同。

private readonly int num = 0;

// or //

private int Num
{
    get { return num; }
}

那么使用其中任何一种是否有区别,或者是某人的偏好? 我仍然是 C# 的初学者,我对 python 有一些经验,所以如果这是一个愚蠢的问题,我深表歉意。 :-)

Getter 通常用于封装对字段的访问,以便对用户隐藏实现逻辑,使 class 更像是一个黑盒子。

私有 getter 只能被实现 class 的人(或使用反射访问该字段的人)访问,因此它对于封装没有用,因为它对于以更方便的方式实现逻辑没有多大用处。

只读字段只能在构造函数或字段初始化器中设置(两者都在底层 IL 的构造函数中执行),而私有 getter 后面的变量可以随时设置。

只读值类型是不可变的,这意味着它在 memory 中保存的数据在构造函数执行后永远不会改变。

作为差异的示例:

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

那么,要封装访问逻辑吗? 然后你需要使用吸气剂。 您是否需要确保分配给字段的值不会更改? 然后使用只读字段(或没有基础字段的吸气剂)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM