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;