有琐碎的财产曾经拯救了你的培根?

在那里有很多建议,你不应该公开地暴露你的领域,而是使用普通的属性。 我一遍又一遍地看到它。

我理解这些论点,但我认为在大多数情况下这不是好建议。

有没有人有一个真正重要的时间的例子? 当写一个微不足道的财产在将来有可能变得重要时(或者当失败时会让他们陷入真正的麻烦)?

编辑:DataBinding参数是正确的,但不是很有趣。 这是DataBinding代码中的一个错误,它不会接受公共字段。 因此,我们必须编写属性来解决该错误,而不是因为属性是明智的类设计选择。

编辑:要清楚,我正在寻找真实世界的例子,而不是理论。 一个真正重要的时刻。

编辑:在setter上设置断点的能力看起来很有价值。 为调试器设计我的代码是不幸的:我宁愿调试器变得更聪明,但考虑到我们有调试器,我会采取这种能力。 好东西。


在一个不确定的未来可能很难使代码工作,但这不是懒惰的借口。 在字段上编码属性是惯例,它是务实的。 称之为防御性编程。

其他人也会抱怨速度问题,但是JIT'er足够聪明,可以让它快速曝光公共领域。 足够快,我永远不会注意到。

想到一些不平凡的东西

  • 公共领域是完全公开的,你不能施加只读或只写语义
  • 一个属性可以有不同的getset可访问性(例如公开获取,内部设置)
  • 您无法覆盖某个字段,但可以拥有虚拟属性。
  • 你的班级无法控制公共领域
  • 你的班级可以控制房产。 它可以将设置限制为允许的值范围,标记状态已更改,甚至延迟加载该值。
  • 反思语义不同。 公共领域不是财产。
  • 没有数据绑定,正如其他人指出的那样。 (这只是一个错误 - 我能理解为什么.NET框架设计者不支持他们不赞成的模式。)
  • 您不能在接口上放置字段,但可以在接口上放置属性。
  • 你的财产甚至不需要存储数据。 您可以创建一个门面并分派给一个包含的对象。
  • 您只需输入13个字符以保证正确性。 这似乎不像投机一般。 存在语义上的差异,如果没有别的,一个属性具有不同的语义含义,并且比公共领域更加灵活。

     public string Name { get; set; }
     public string name;
    

    在第一次使用.net时我记得有一次.net我将几个类编码为只是字段,然后我需要将它们作为属性出于某种原因,并且当我可以刚刚完成第一个时,它完全浪费时间时间。

    那么你有什么理由不遵循约定? 你为什么觉得需要游泳? 没有这样做,它为你节省了什么?


    调试时,我有一个简单的属性可以节省我几次。 .Net不支持数据中断点的概念(读或写)。 偶尔,在调试一个非常复杂的场景时,跟踪对特定属性的读/写操作非常重要。 这是一个财产容易,但不可能与一个领域。

    如果您不在生产环境中工作,则为了调试目的而重构字段 - >属性非常简单。 偶尔你会遇到只能在生产环境中复制的错误,而这种错误很难用新的二进制文件修补。 一个属性可以将你保存在这里。

    不过,这是一个相当有限的情况。


    杰伊,我曾经想过同样的事情。 为什么要使用一个财产,如果它只是为了直接访问私人会员? 如果你可以把它描述成一个自动属性,那么拥有一个属性而不是一个属性就显得很愚蠢。 即使你需要改变实现,你以后可以随时重构一个真实的属性,任何相关的代码仍然可以工作,对吧? 好吧,也许不是。

    你看,我最近看到了轻微的属性,所以也许现在我可以帮你做同样的事情。

    最后让我相信的是相当明显的一点(现在回想起来).Net中的属性只是getter和setter方法的语法糖,而这些方法与属性本身的名称不同。 无论如何,在同一个程序集中的代码仍然可以工作,因为你必须同时重新编译它。 但是,如果您将某个字段重构为某个属性,除非它同时针对您的新版本重新编译,否则链接到您的另一个程序集中的任何代码都将失败。 如果从一开始就是财产,一切都还是不错的。

    链接地址: http://www.djcxy.com/p/51341.html

    上一篇: Have trivial properties ever saved your bacon?

    下一篇: DefaultValue attribute is not working with my Auto Property