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,文件大小无关紧要因为在编译时,一个字段是无论如何生成(看,反编译在答案的最后)并且两种情况下编译结果中都有get
和set
方法.
自动属性让您的代码更有条理并且简短,这有利于代码的可维护性和可读性,因此您应该更喜欢它们 可能的话。
我们暂时搁置 "In field without auto-property you can assign default value" 话题 (also, it is possible now in auto-properties too in c# 6.0),有时,您想 运行 更多代码在 属性 的 get
或 set
方法中,如调用 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;}
在一行中,因为显式键入代码并将其保持在一行中没有最高意义,所以我可以将这样的属性与方法区分开来,方法一目了然。
对不起,如果我的问题几乎是关于代码风格的,但对于简单的情况,下面哪个更好?
案例 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,文件大小无关紧要因为在编译时,一个字段是无论如何生成(看,反编译在答案的最后)并且两种情况下编译结果中都有get
和set
方法.
自动属性让您的代码更有条理并且简短,这有利于代码的可维护性和可读性,因此您应该更喜欢它们 可能的话。
我们暂时搁置 "In field without auto-property you can assign default value" 话题 (also, it is possible now in auto-properties too in c# 6.0),有时,您想 运行 更多代码在 属性 的 get
或 set
方法中,如调用 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;}
在一行中,因为显式键入代码并将其保持在一行中没有最高意义,所以我可以将这样的属性与方法区分开来,方法一目了然。