看来我在理解上遇到了相当大的不足。我知道最好的做法是在类中使用私有(private)变量并通过类外的公共(public) getter 访问它。现在,当使用 C# 的默认 getter 方法(private string Image { get; }
)时,我无法访问此类之外的 Image
变量(Console.WriteLine( items[i].Image);
).
虽然我可以编写自定义公共(public) getter,但这似乎很荒谬,因为在私有(private)变量上使用私有(private) getter 除了返回变量外什么都不做似乎完全多余,因此让我觉得我遗漏了什么。
最佳答案
当你声明
private string Image { get; }
你创建了一个私有(private)的只读属性,这意味着 getter 和 setter 都是私有(private)的。此外,setter 在构造函数/初始值设定项之外是不可访问的。
将其更改为
public string Image { get; }
会给你一个公共(public)的只读属性。这大致对应于以下安排:
- getter 是公开的,即类内外的每个人都可以访问
- setter 是私有(private)的*,即只能在类内部访问。
- 该属性是只读的,因此对私有(private) setter 的额外限制是必须通过构造函数或初始化程序访问它。
In Java I would create a private variable and a public getter. Is this effectively the version of that in C#?
这在 Java 中的等效项是私有(private)最终字段,因为 C# 限制对构造函数外部的 setter 的访问。
* 实际上,只读属性没有setter。分配直接写入属性的后备存储,而无需通过 setter 。如果您尝试通过反射编写属性,则拥有只能从构造函数访问的私有(private) setter 与根本没有 setter 之间的区别变得很重要。
关于c# - 私有(private)变量和 setter/getter 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46779538/