在所有者类中使用属​​性vs后备字段

mik*_*igs 9 c# properties automatic-properties

我喜欢C#中自动实现的属性,但最近有这只大象站在我的小隔间里,我不知道该怎么办.

如果我使用自动实现的属性(以下称"aip"),那么我不再需要内部使用的私有支持字段.这很好,因为aip没有副作用.但是如果稍后我需要在get或set中添加一些额外的处理呢?

现在我需要创建一个支持字段,这样我就可以扩展我的getter和setter.这适用于使用该类的外部代码,因为它们不会注意到差异.但是现在所有对aip的内部引用都会在访问属性时调用这些副作用.现在,必须重构对ate aip的所有内部访问才能使用后备字段.

所以我的问题是,大多数人都做了什么?您是使用自动实现的属性还是更喜欢始终使用后备字段?您如何看待具有副作用的属性?

And*_*are 6

Eric Lippert有一篇很棒的博客文章回答了这个问题:

如果促使从自动实现的属性更改为显式实现的属性的原因是更改属性的语义,那么您应该评估从类中访问属性时所需的语义是否与访问时所需的语义相同或不同来自课外的财产.

如果调查的结果是"来自类内,访问此属性的所需语义不同于从外部访问属性所需的语义",那么您的编辑引入了一个错误.你应该修复这个bug.如果它们是相同的,那么你的编辑没有引入错误; 保持实施相同.

  • 我恭敬地不同意 - 这是一个语义问题,如果你需要在不使用属性的情况下直接使用支持字段,那么在你不需要之前就会破坏某些东西. (4认同)
  • 虽然我一直是EL博客链接的粉丝,但这个答案实际上并没有告诉海报.他假设的情况是逻辑*是*不同的; 这不是他必须问自己的问题. (2认同)