私有类变量,哪种更好?
如果你有一个像 int limit
这样的属性,你希望它是:
int Limit {get; set;}
然后在类内部使用它,像这样:
this.Limit
是否有使用或不使用它的原因?也许是出于性能方面的考虑?
我想知道这是否是一个好习惯。
私有类变量,哪种更好?
如果你有一个像 int limit
这样的属性,你希望它是:
int Limit {get; set;}
然后在类内部使用它,像这样:
this.Limit
是否有使用或不使用它的原因?也许是出于性能方面的考虑?
我想知道这是否是一个好习惯。
对于私有成员,我只有在获取和/或设置值会导致其他事件发生时才将其作为属性处理,例如:
private int Limit
{
get
{
EnsureValue();
return this._limit;
}
}
否则,字段没问题。如果需要增加它们的可访问性,那么将其变成属性已经是一个大改变了,在这一点上再进行更改不是什么大事。当可访问性为私有时,自动属性相对于字段唯一的真正优势在于可以设置断点以跟踪变量的访问和更新。如果这对您的情况很重要,那么一定要使用自动属性。否则,鉴于没有实质性的优势,我选择使用最简单的结构,也就是一个字段。
我认为使用属性是一个好的实践。如果你需要暴露限制值并使用本地成员,那么需要编写更多的代码;而如果它是一个属性,只需要更改其修饰符即可。
我认为这也更加清晰。
考虑到这是一个私有API,它是实现细节 - 你可以在这里做任何想做的事情。然而,即使对于私有类,没有使用属性的很少原因。 JIT会将属性内联,除非存在额外的代码,因此实际上不会影响性能。
我认为更喜欢属性的最大原因是:
从我的角度来看,使用属性代替变量的原因是:
EnsureValue()
,EnsureValue();
并非所有这些都适用于int Limit {get; set;}
风格的属性。
拥有私有或保护属性并没有什么问题;当底层变量与某些规则或副作用相关联时,这通常非常有用。
属性似乎更适合公共变量的原因是,在公共情况下,它是一种对未来实现变化进行保险的方式,即属性将保持不变,但实现细节会在某种程度上改变(和/或需要某些额外的业务规则)。
就性能而言,这通常是微不足道的,或者对于直接赋值属性来说确实相同。
我个人不喜欢(但经常使用)纯赋值属性,因为它们只会使代码凌乱。我希望C#能够允许“事后重构”。
我通常遵循以下原则:如果只是为了私人使用,请使用字段,因为它更快。
如果你决定它应该在某一天变成公共、受保护的或内部的,重构为属性也不难,而且使用像ReSharper这样的工具大约只需要3秒钟就可以完成... :)
属性提供了一些非常好的自动功能(如Json和Xml序列化)。
字段则没有。
属性也可以是接口的一部分。如果您决定以后进行重构...这也可能是需要考虑的事情。
属性只是语法糖,C#会将它们编译成get_PropertyName
和set_PropertyName
,因此性能差异不是一个考虑因素。