C#-自动属性与3.0之前的属性

C#-自动属性与3.0之前的属性,c#,properties,C#,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更好,因为当您的类中有许多属性时,它们不会占用太多空间,文件大小也

如果我的问题主要是关于代码风格,请原谅,但对于简单的情况,下面哪一个更好

案例1:

private static int number = 1;
public static int Number
{
    get { return number; }
    set { number = value; }
}
案例2:

public static int Number
{
    get;
    set;
}

我认为案例2更好,因为当您的类中有许多属性时,它们不会占用太多空间,文件大小也会减小。

下面的语法称为,就文件大小而言,这无关紧要,因为在编译时,无论如何都会生成一个字段(请参见答案末尾的反编译),在这两种情况下,编译结果中都有
get
set
方法

自动属性允许您使代码更加有序和简短,这有利于代码的可维护性和可读性,因此您应该尽可能使用它们

我们将暂时搁置“在没有自动属性的字段中,您可以指定默认值”主题(),有时,您希望在属性的
get
set
方法中运行更多的代码,例如调用
事件
句柄或验证值,这就是标准属性声明出现的地方,例如:

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;}

在一行中,由于显式键入代码并将其保留在一行中没有最高意义,因此我可以将这样的属性与跨越多行的方法区分开来。

为什么您会问您知道不在主题中的问题(否则“对不起”是什么意思)并且没有显示你关于这个主题的研究的细节?至少学习“自动属性”的专有名称触摸很好。我建议阅读serach的结果-例如…一个小提示:如果
Number
的默认值为1,而在案例B中为0是的,为了示例,我将其初始化为1。我会小心使用该链接,其中一些功能已被删除(主要主体构造函数).正如我所说,我的回答忽略了一个事实,即自动属性可能有也可能没有默认值功能。