2015-10-04 61 views
0

对不起,如果我的问题是关于代码风格的,但对于简单的情况哪个风箱更好?C# - 自动属性VS 3.0之前的属性

案例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

为什么你会问你知道不是关于主题的问题(否则有什么“对不起”),并且没有显示你关于这个主题的研究细节?至少学习“自动属性”的适当名称将是很好的接触。我建议阅读通过serach的结果 - 即https://www.bing.com/search?q = C%23 + - +属性+ vs. +自动+属性... –

+0

一个小的通知:如果A 'Number'的默认值是1,而在B的情况下它是0 – nZeus

+0

是的,为了举例,我初始化为1。 –

回答

1

下面的语法称为auto properties它不会在文件大小的条款,因为在编译时间的问题,产生场反正看到,反编译的答案结束)和在这两种情况下编译结果中都有getset方法。

汽车性能让你保持你的代码更有条理和短这是很好的为你的代码的可维护性和可读性,因此你应该更喜欢他们可能的情况下。

我们将抛开“在现场没有自动属性,你可以指定默认值”为第二(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; } 

您将看到编译器反正加入了背景私有字段:

Fields

+0

我会小心这个链接,其中一些功能已被删除(主体构造函数)。 –

+0

正如我所说,我的答案忽略了这一事实,即自动属性可能会或可能不会具有该默认值功能。 –

0

虽然有编译器没有区别,因为它会为您生成的领域,我宁愿让我的代码干净,只是使用

public int Num {get;set;} 

在同一行,因为没有至高无上的意思明确地键入的代码,并保持它在同一行,让我从方法,这在浏览多行跨越区分这样的性质。