这个问题已经在这里有了答案:




9年前关闭。






通过以下方式定义属性之间有区别吗?

// private, with getter & setter
private string fName;
public string Name
{
    get { return this.fName }
    set { this.fName = value }
}

// define as a Property
public string Name { get; set;}

据我所知,它看起来仅是一种风格偏好。我想念什么吗?

最佳答案

差异:

  • 第二种形式将仅使用C#3编译器或更高版本
  • 进行编译
  • 第二种形式不允许任何代码(即使在同一类中)也直接访问该字段,因为实际字段具有“无法说出的名字”

  • 第二个版本是所谓的自动实现的属性(或简称为“自动属性”)。它们是在C#3中引入的。如果您只编写看起来像第一个版本的代码(即不涉及逻辑),那么自动属性就很棒。您以后总是可以通过将其转换为第一种形式来添加逻辑。在源代码和二进制兼容性方面,您所有的代码都将与该更改兼容。
    请注意,在C#6之前的版本中,自动属性不允许您指定默认值,并且不存在真正的只读自动属性(即不带 setter/getter 的自动属性)。您能找到的最接近的是带有私有(private)二传手的公共(public)获取者,例如
    public string Name { get; private set; }
    
    它并不完全相同,但是在许多情况下都足够接近。

    关于c# - C#getters,setters声明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4923630/

    10-11 18:21