私有类变量的字段与属性

Joa*_*nge 29 .net c# properties class

对于私有类变量,哪一个更受欢迎?

如果您有类似的属性int limit,您希望它是:

int Limit {get; set;}
Run Code Online (Sandbox Code Playgroud)

并在类中使用它,如下所示:

this.Limit
Run Code Online (Sandbox Code Playgroud)

是否有理由使用它或不使用它?可能出于性能原因?

我想知道这是不是一个好习惯.

Rex*_*x M 31

对于私有成员,我只在获取和/或设置值时使其成为属性应该导致其他事情发生,例如:

private int Limit
{
   get
   {
       EnsureValue();
       return this._limit;
   }
}
Run Code Online (Sandbox Code Playgroud)

否则,字段很好.如果你需要增加它们的可访问性,它已经是一个足够大的变化,使它在那时成为一个属性并不是一个大问题.

编辑:斯科特在评论中提醒我们,属性中的副作用通常会导致更多的痛苦.不违反单一职责并限制属性逻辑一致,逻辑运算仅在值必须在栅极来完成-如迟缓装载(如在上面的例子中),转化的内部结构为公有用的格式,等等

  • 你应该尽量避免有副作用的属性.属性由各种不同的东西评估,包括调试监视,本地,自动窗口和快速监视窗口.因此,具有副作用的属性可能会在调试会话期间导致许多奇怪的行为,并且有时会使查找运行时错误变得非常困难. (5认同)

Jar*_*Par 11

当可访问性是私有时,自动属性对字段的唯一真正好处是您可以在访问和更新变量时设置断点.如果这对您的场景很重要,那么一定要使用自动属性.否则,鉴于没有实质性优势,我选择使用最简单的构造,即场.

  • 你在这里缺少的一件事是能够在不改变公共界面的情况下进行未来的修改.在公共接口稳定性方面,属性为您提供了更大的灵活性. (2认同)

Pat*_*Pat 5

我会说使用属性是一种很好的做法。如果您不得不公开限制值并使用本地成员,它将需要更多的编码,而如果它是一个属性,则只需要更改其修饰符。

我认为它也更干净。