C# 是否有任何理由对字段使用非常简单的属性?
我目前编写了以下代码:C# 是否有任何理由对字段使用非常简单的属性?,c#,C#,我目前编写了以下代码: public class General { /// <summary> /// Private variables. /// </summary> private const float fVersion = 1.3f; private static bool bMonitoring = false; /// <summary> /// Retrieves the curren
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;
}
}
}
公共类通用
{
///
///私有变量。
///
私有常量浮动版本=1.3f;
私有静态布尔b监视=假;
///
///检索应用程序的当前版本。
///
公共静态浮点版本
{
得到
{
返回fVersion;
}
}
///
///我们是否在监控性能?
///
公共静态布尔监控
{
得到
{
返回b监视;
}
设置
{
b监测=价值;
}
}
}
如果我经常检查
General.b监视或General.Version
(可能每秒超过100次!)并真正关心性能:让我的类这样编写是一种好做法,还是我应该简单地删除这些属性并公开这些字段?不要担心性能。属性访问非常快(而且应该非常快),编译器可能会将它们内联
属性比字段更受欢迎,不是因为性能,而是因为封装,当以后需要检查或计算属性时,它确实会有所帮助
Jon Skeet的更多内容在本例中,如果您不打算向getter或setter添加一些逻辑,那么我将使用静态字段。性能将是相同的
但如果以后在设置ot get值时需要额外的逻辑,那么它会优先使用属性,因为它允许版本控制,并根据OOP原则提供封装。不在乎表现
对于监视
属性,可以使用自动实现的属性,如
public static bool Monitoring { get; set; }
但是在这种情况下,您需要实现一个静态构造函数(多亏了@Mafii)
或者,如果您使用C#6.0,则只需:
public static bool Monitoring { get; set; } = false;
我认为你不应该关心这方面的表现。但是,使用get方法访问这些值就像调用方法一样。如果您直接从静态类和常量值调用您的值,我认为(必须验证)您将避免对方法stuff和返回循环的微调用。实际上我很关心,因为在我的情况下,我的应用程序每秒从另一个程序的内存读取1000次(而使用线程进行循环。Sleep(1)
所以我更喜欢从不落后。您是否有任何测量结果表明访问字段比访问属性有显著的性能改进。如果我将监控
设置为自动属性,我如何将其初始化为false
呢?是的,对不起。您是对的。如果您选择我们,这是可能的eC#6.0类似于:public int X{get;set;}=X;
@MegaTron在C#6之前,您可以使用静态ctoriirc@shavit很高兴对您有所帮助无需添加静态构造函数,甚至无需添加=false
,它是bool
(值类型)的默认值属性的支持字段将被初始化为这样。另一方面,如果您希望它为true
,则需要这样做。
public static bool Monitoring { get; set; } = false;