C#-自动属性与3.0之前的属性
如果我的问题主要是关于代码风格,请原谅,但对于简单的情况,下面哪一个更好 案例1: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更好,因为当您的类中有许多属性时,它们不会占用太多空间,文件大小也
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。我会小心使用该链接,其中一些功能已被删除(主要主体构造函数).正如我所说,我的回答忽略了一个事实,即自动属性可能有也可能没有默认值功能。