![]() |
1
5
使用属性是可以的,只要它们不是虚拟的/重写的。属性本质上是方法,您不应该从构造函数内部调用虚拟方法,因为可能尚未构造适当的类型。微软已经列出了他们自己的 set of guidelines ,只需向下滚动到底部查看相关的指导和说明问题的代码片段(它们使用方法来说明问题,但正如我提到的那样,.NET属性本质上是特殊的方法)。 |
![]() |
2
3
通过属性设置器传递参数,可以只在一个地方保留任何验证代码。 |
![]() |
3
3
我建议将它发送到属性,而不是直接发送到私有字段,尽管您的实际实现将指定具体的条件。例如,有时在使用属性时会激发一些事件,并且不希望在构造函数期间激发这些事件。或者您可能出于其他原因想要绕过属性逻辑。 |
![]() |
4
2
请小心使用属性setter。您可能在setter中有可能导致意外副作用的代码。 |
![]() |
5
1
我在构造函数内操作字段。字段实际上表示对象的固有状态,构造函数的工作是初始化这个内部状态。属性仅用于封装,是对象状态公共接口的一部分。 在设置对象的内部状态之前,应用于构造函数参数或属性输入值的转换逻辑可能非常不同。无论如何,如果是这样的话,我使用从属性设置器和构造函数调用的显式转换方法,而不是直接在属性设置器上链接构造函数。 如果根本没有逻辑,我就不明白为什么要在构造函数中使用属性设置器。 |
![]() |
Luke Hammer · resharper表达式正文格式 7 年前 |
![]() |
SourceSurfer · 我如何添加自己的重拾器模板/狙击手? 7 年前 |
![]() |
doorman · 新建对象时生成道具的代码 7 年前 |