8

当引用类内的值时(来自同一类内),您应该使用可以从其他类访问的字段还是属性?

例如,我应该以哪种方式引用班级中的变量,为什么?

public static class Debug
{
    private static int _NumberOfEvents = 1;

    public static int NumberOfEvents
    {
    get
    {
        return _NumberOfEvents;
    }
    set
    {
        _NumberOfEvents = value;
    }
}

public static void LogEvent(string Event)
{
    //This way?
    Console.WriteLine("Event {0}: " + Event, _NumberOfEvents);
    _NumberOfEvents++;

    //Or this way?
    Console.WriteLine("Event {0}: " + Event, NumberOfEvents);
    NumberOfEvents++;
}

}

谢谢

4

2 回答 2

5

当它是这样的简单属性时,请考虑将其替换为“自动”属性,如下所示:

public static int NumberOfEvents {get;set;}

有了这么简单的属性,您访问它们的方式并不重要:尽管访问支持变量可能看起来快一点,但优化器将负责优化函数调用,使两种访问速度同样快。

当属性更复杂时,例如,当它有额外的验证和/或触发事件时,决定会变得更复杂:您需要决定是否要获得与访问属性相关联的效果,或者是否希望避免他们。然后你根据你想要发生的事情做出决定。

于 2013-08-16T02:45:37.867 回答
3

最终可能没有区别,因为 JITter 无疑会将使用属性时生成的函数调用内联到直接字段访问中。

就个人而言(以及在我参与过的团队中,包括当前团队),我们使用该字段并保留属性以供在类外部访问..除非它们是自动属性(令人惊讶的是..这对我们来说很少发生)或者它们包含逻辑。

于 2013-08-16T02:43:56.283 回答