C# getters, setters 声明

标签 c# syntax getter getter-setter

<分区>

Possible Duplicates:
Why use getters and setters?
C# 3.0 Auto-Properties - useful or not?

用下面的方式定义属性有区别吗-

// 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 之前的版本中,自动属性不允许允许您指定默认值,并且不存在真正只读的自动属性(即没有 getter 的自动属性) .最接近的是带有私有(private) setter 的公共(public) getter,例如

public string Name { get; private set; }

虽然不完全相同,但在许多情况下已经足够接近了。

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

相关文章:

java - setter 的 Lambda 表达式

c++ - 不同编程语言的getters和setters的使用

c# - 从列表中删除用户选择的项目

c# - 如果当前失败,如何继续队列中的其他任务?

c++ - 如何实现两个可以相互访问的结构体?

java - 在 Java 中,HashSet<Integer> = new HashSet(2) 和 HashSet<Integer> = new HashSet<Integer>(2) 之间有什么区别?

java - 在 JSP/Java 中,如何用 s.th. 替换 getter/setter。更通用?

c# - C#中未分配变量的内存

c# - 为什么显示下拉列表需要在 DataGridView 中单击两次?

c++ - 关于循环和迭代器的 c++11 范围