私有变量和吸气剂的问题

Issues with private variables and getters

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

虽然我可以写一个自定义 public getter,但这似乎很荒谬,因为在私有变量上有一个私有 getter 除了 return 变量什么都不做似乎完全多余,因此让我觉得我错过了什么。

当你申报时

private string Image { get; }

您将私有只读 属性 设置为私有,这意味着 getter 和 setter 都是私有的。此外,setter 在构造函数/初始值设定项之外是不可访问的。

改成

public string Image { get; }

会给你一个 public 只读 属性。大致对应如下排列:

  • getter是public,即class
  • 内外的所有人都可以访问
  • setter 是私有的*,即只能在 class.
  • 内部访问
  • 属性是只读的,所以对私有setter的额外限制是必须通过构造函数或初始化程序访问它。

In Java I would create a private variable and a public getter. Is this effectively the version of that in C#?

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

* 其实只读属性是没有setter的。分配直接写入 属性 的后备存储,而无需经过 setter。如果您尝试通过反射编写 属性,则只有构造函数可以访问私有 setter 与根本没有 setter 之间的区别变得很重要。

要么声明一个私有成员:

private string _image;

或者一个public属性。当您声明 属性 时,getter 和 setter 有自己的隐私修饰符(即 protected/public/private/none)。例如:

public string Image { get; protected set; }