C# - 自动属性 ​​VS pre-3.0 属性

C# - auto-properties VS pre-3.0 properties

对不起,如果我的问题几乎是关于代码风格的,但对于简单的情况,下面哪个更好?

案例 1:

private static int number = 1;
public static int Number
{
    get { return number; }
    set { number = value; }
}

案例 2:

public static int Number
{
    get;
    set;
}

我认为情况 2 更好,因为当您的 class 中有许多属性时,它们不会消耗那么多 space 并且文件大小会减少。

下面的语法叫做auto properties文件大小无关紧要因为在编译时,一个字段是无论如何生成看,反编译在答案的最后)并且两种情况下编译结果中都有getset方法.

自动属性让您的代码更有条理并且简短,这有利于代码的可维护性和可读性,因此您应该更喜欢它们 可能的话。

我们暂时搁置 "In field without auto-property you can assign default value" 话题 (also, it is possible now in auto-properties too in c# 6.0),有时,您想 运行 更多代码在 属性 的 getset 方法中,如调用 event 句柄或验证值,这就是标准 属性 声明的用武之地,因为示例:

private int mNumber;

public int Number
{
    get
    {
        return Number;
    }
    set
    {
        if (Number == 8)
        {
            throw new CannotReceive8Exception();
        }
        else
        {
            mNumber = value;
        }
    }
}

如果你看这段代码的反编译代码:

public int Number { get; set; }

你会看到编译器无论如何都添加了一个后台私有字段:

虽然编译器没有区别,因为它会为您生成字段,但我更愿意保持代码干净,只使用

public int Num {get;set;}

在一行中,因为显式键入代码并将其保持在一行中没有最高意义,所以我可以将这样的属性与方法区分开来,方法一目了然。