【问题标题】:What is the difference between properties and fields? [duplicate]属性和字段有什么区别? [复制]
【发布时间】:2021-09-03 14:37:32
【问题描述】:

你好,这个字段有什么区别:

public string Name;

还有这个属性:

public string Name{get;set;} 

我读过这个话题:

What is the { get; set; } syntax in C#?

【问题讨论】:

  • 第一个是字段不是属性)。第二个是自动实现的属性(基本上是一个 getter 和 setter,带有一个“隐藏”的支持字段)。 stackoverflow.com/questions/1180860/…
  • 封装。在第二个实例中,您刚刚定义了一个变量,在第一个实例中,变量周围有一个 getter / setter。因此,如果您决定要在以后验证变量 - 这会容易得多。

标签: c#


【解决方案1】:

这只是一个字段,也就是你所说的直接在类或结构上声明的变量:

public string Name;

这是一个属性:

public string Name { get; set; } 

它们在功能上相似。 getter 和 setter 允许您分别自定义访问或设置变量时发生的情况。传统上,属性用于公开在类内部用于工作的私有字段。您这样做是为了公开变量,而不允许人们进入并更改或破坏类的内部工作。

这是封装的一部分。

在这个特定的语法中,您“自动实现”了 getter 和 setter,它创建了一个隐藏的支持字段,您在代码中的任何地方都看不到它。结果是使用它看起来非常类似于只使用一个字段。

在这种情况下,为什么不直接使用字段? 除了带来更好的设计之外,还有一些重要的含义与惯例有关。例如,在很多涉及数据绑定的情况下,只考虑属性进行绑定。字段被忽略。所以在实体框架中,一个属性可能代表数据库中的一个列......而且它必须是一个属性。不能是普通字段。

这里的关键教训是,如果你想在你的类之外公开一个字段,你应该使用一个属性来促进封装并向其他人(在某些情况下还有代码)表明你确实打算公开什么你暴露了。

更多:What is the difference between a field and a property?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 2019-03-07
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 2016-01-27
    相关资源
    最近更新 更多