私有变量和getter的问题

时间:2017-10-16 21:41:15

标签: c# oop getter

我的理解似乎相当缺乏。我理解最好在类中使用私有变量,并通过该类外部的公共getter访问它。现在使用C#的默认getter方法(private string Image { get; })时,我无法访问此类之外的Image变量(Console.WriteLine(items[i].Image);)。

enter image description here

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

2 个答案:

答案 0 :(得分:3)

宣布

private string Image { get; }

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

将其更改为

public string Image { get; }

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

  • 获取者是公开的,即课堂内外的每个人都可以访问
  • setter是私有 * ,即只能在班级内访问。
  • 该属性是只读的,因此对私有setter的额外限制是必须通过构造函数或初始化程序访问它。
  

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

Java中的等价物将是私有的final字段,因为C#限制了对构造函数外部的setter的访问。

* 实际上,没有只读属性的setter。分配直接写入属性的后备存储,而无需通过setter。如果您尝试通过反射编写属性,那么让私有setter只能从构造函数访问并且根本没有setter之间的区别变得很重要。

答案 1 :(得分:0)

要么声明私有成员

private string _image;

公共财产。声明属性时,getter和setter都有自己的隐私修饰符(即protected / public / private / none)。例如:

public string Image { get; protected set; }