我目前编写了这段代码:
public class General
{
/// <summary>
/// Private variables.
/// </summary>
private const float fVersion = 1.3f;
private static bool bMonitoring = false;
/// <summary>
/// Retrieves the current version of the application.
/// </summary>
public static float Version
{
get
{
return fVersion;
}
}
/// <summary>
/// Are we monitoring performance?
/// </summary>
public static bool Monitoring
{
get
{
return bMonitoring;
}
set
{
bMonitoring = value;
}
}
}
如果我经常检查General.bMonitoring
或General.Version
(可能是......每秒超过100次!)而且非常关心性能:将我的课程写成这样的是好的做法,或者我应该简单地删除这些属性并将字段公开吗?
答案 0 :(得分:2)
在这种情况下,如果你不打算在getter或setter中添加一些逻辑,那么我会使用静态字段。表现将是相同的。
但是如果稍后在设置获取值时需要额外的逻辑,那么它会使用属性,因为它允许版本控制,并且它根据OOP原则为您提供封装。不关心表现
对于Monitoring
属性,您可以使用自动实现的属性,如
public static bool Monitoring { get; set; }
但在这种情况下,您需要实现一个静态构造函数(感谢@Mafii)
static General()
{
Monitoring = false;
}
或者如果您使用C#6.0,那么只需:
public static bool Monitoring { get; set; } = false;
答案 1 :(得分:1)
不要担心表现。属性访问是(并且应该)非常快,编译器可以内联它们。
属性优于字段而不是因为性能,但是因为封装并且在以后需要例如检查或使属性计算时它将真正有用。
更多作者Jon Skeet http://csharpindepth.com/Articles/Chapter8/PropertiesMatter.aspx