私有变量和 getter 的问题

Jon*_*ght 1 c# oop getter

看来我在理解上遇到了相当大的缺乏。我知道最好的做法是在类中使用私有变量并通过所述类外部的公共 getter 访问它。现在,当使用 C# 的默认 getter 方法 ( private string Image { get; }) 时,我无法访问Image此类 ( Console.WriteLine(items[i].Image);) 之外的变量。

在此输入图像描述

虽然我可以编写一个自定义的公共 getter,但这似乎很荒谬,因为在私有变量上有一个除了返回变量之外什么也不做的私有 getter 似乎完全多余,因此让我觉得我错过了一些东西。

das*_*ght 5

当你声明

private string Image { get; }
Run Code Online (Sandbox Code Playgroud)

您创建了一个私有只读属性,这意味着 getter 和 setter 都是私有的。此外,在构造函数/初始值设定项之外无法访问 setter。

将其更改为

public string Image { get; }
Run Code Online (Sandbox Code Playgroud)

会给你一个公共只读属性。这大致对应如下的安排:

  • getter 是公共的,即类内和类外的每个人都可以访问
  • setter 是 private *,即只能在类内部访问。
  • 该属性是只读的,因此对私有 setter 的额外限制是它必须通过构造函数或初始值设定项进行访问。

在 Java 中,我将创建一个私有变量和一个公共 getter。这实际上是 C# 中的版本吗?

Java 中的等效项是私有最终字段,因为 C# 限制对构造函数外部的 setter 的访问。

*实际上,只读属性没有setter。赋值直接写入属性的后备存储,无需通过 setter。如果您尝试通过反射编写属性,则拥有只能从构造函数访问的私有 setter 和根本没有 setter 之间的区别就变得很重要。