关于C#:为什么使用属性而不是字段是好的?


Why is it good to use Properties instead of fields?

本问题已经有最佳答案,请猛点这里访问。

我读了很多关于我不应该在我的模型和DTO中使用字段的文章,但我从来没有读过这是为什么。

1
2
3
public int property{ get; set; }

public int Foo;

在引擎盖下面,这两者之间的区别是什么?


重要的是一个差分接口CAN有不场的属性。

这篇文章是非常有用的乔恩飞碟通过给定三本。

Practical benefits of properties

There are times when you could use non-private fields, because for
whatever reason you don't care about the compatibility reasons above.
However, there are still benefits to using properties even for trivial
situations:

  • There's more fine-grained access control with properties. Need it to be publicly gettable but really only want it set with protected
    access? No problem (from C# 2 onwards, at least).
  • Want to break into the debugger whenever the value changes? Just add a breakpoint in the setter.
  • Want to log all access? Just add logging to the getter.
  • Properties are used for data binding; fields aren't.

一个好的理由是因为它允许你incluede逻辑和验证内部的吸气和制定


采取从http://///propertiesmatter.aspx csharpindepth.com文章的第八章

福利院的实际性能

时代当你有可以使用的非私人机场,因为任何原因你不关心"的原因。然而,有安静的利益甚至琐碎的情况:使用性能研究

有更多的访问控制属性和细晶。人们需要的gettable但真的只想要它集和保护访问?NO的问题(从C 2 onwards #,至少)。要一直休息到调试器的价值的变化?只是添加一个断点在犬。要记录所有的访问?只是添加记录到吸气剂。属性是用于数据绑定;域不是。这些都是传统的"房地产综合利用逻辑"是不可能的,但所有的狡猾与平原/域。你可以这样做在"当我需要它"的基础,为什么不只是在一个一致的开始?它甚至更多的没有头脑的A和C # 3自动性能。

曝光的哲学原因为只读属性

你写的每一型,你应该考虑它的接口到世界其他地方(包括组装在同一班)。这是什么使得它可以描述的,它的外形象。执行工作的一部分不应该是描述,是任何比它已经是。(这是为什么我喜欢的组成是在继承,继承自己的理解为基础的决策选择或可能实现的限制。)

a物业communicates的想法"我想做一个给你的价值的价值,或接受一个你。"它在实现的概念,它在界面的概念。在另一场communicates外部信息的手,说:"这是一本代表值的类型特异性的方式"。有没有类似草药,它的存储格式。这是部分原因,部分接口场不属于他们don’t有知识的东西,他们谈论的是什么更比我更。

我很同意,很多时候,在没有使用域可以是终身的问题中的应用。它只需要一个明确的情况下,那些沉默的时代,它的设计原则violates危机曝光执行。