私人套装或私人会员?

我想知道什么被认为是C#最佳实践,私人/受保护的成员与公共吸气者,或公共吸气者与私人/受保护的制定者?

public int PublicGetPrivateSetter { get; private set; } 

  private int _privateMember; public int PublicGetPrivateMember { get { return _privateMember; } } 

我觉得在你的代码中使用私有成员更明确它是一个私有的setter(使用命名约定)。 另一方面,使用私有设置器可以选择使用虚拟(受保护),编写更少的代码,减少错误的空间,并且可以在以后为您提供添加副作用的选项。

我找不到什么被认为是最佳实践,或者即使一个被认为比另一个更好。 从我所看到的通常80%的时间(从我见过的代码)人们不使用私人制定者…我不确定这是因为人们不知道私人制定者,或者因为它是被认为更好地实际使用私人成员。

编辑:

实际上,我在使用私有成员时忘记的其他好处是默认值和readonly的使用。

我更喜欢使用自动实现的属性,除非默认实现不能达到我想要的效果。 所以在这种情况下,由于自动实现的属性可以满足您的需求,只需使用:

 public int Foo { get; private set; } 

但是另一种情况是,如果要将字段设置为readonly (意味着可以在构造函数中设置字段的唯一位置)。 然后,您需要定义支持字段并将其标记为只读,因为自动实现的属性不支持:

 private readonly int foo; public int Foo { get { return foo; } } 

没有我所知道的最佳实践。 我知道自动属性主要是为了使代码生成和LINQ相关的东西更容易。

对我来说,我开始使用自动属性,然后在需要时重构。 根据需要,我可能会像您提到的那样将某些内容更改为虚拟或受保护,或者可能重构使用变量(当我想重构set访问器以获得某些逻辑时)。

这是同一件事。 在第一个示例中,编译器生成后备存储。 在第二个中,您生成了后备存储。 由于实现是类内部的,因此将一个重构到另一个并不是什么大问题。 像Resharper这样的工具变得微不足道。 您可能没有看到私人制定者的原因是它的C#3.0function。

私人制定者没有任何问题。 在大多数情况下,它与auto属性一起使用,使属性只读取在对象范围之外。

概念性地说,它不会改变任何东西。 这主要是品味问题。

我个人使用私有的setter因为我很懒,并且propg使用propg片段。 (支持标签选项卡)

此外,大多数时候我最终设置脏标志和绑定事件到这些属性,所以我不妨现在做一部分工作。 如果您以后需要添加一个setter,那么如果编写代码时不使用后面的成员就会更容易,因为它将更少的代码更改。

这个问题没有好的答案。 最好的实践是遵循我们的公司命名法,如果你单独,那么你喜欢的方式

在我看来,在最终的编译代码中没有最佳实践和很少(如果有的话)差异,它实际上只取决于您的需求或喜欢/不喜欢。 如果您遵循组的命名标准和满足要求(例如,不需要传播更改通知)那么它应该无关紧要。

私有字段的一个优点是您可以在声明的同一位置定义默认值。 在自动实现的属性中,如果它不是null或类型的默认值,您将在构造函数中定义默认值。

但是,我仍然喜欢私人制定者。 但我们通常不使用自动实现的属性,因为我们的setter通常具有更丰富的function – 例如属性更新通知,日志记录等。