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更好,因为当你的class级中有很多属性时,它们不会占用太多空间,文件大小也会减少。

下面的语法称为自动属性 , 它与文件大小无关,因为在编译时, 无论如何都会生成一个字段参见答案末尾的反编译 ),并且编译中getset方法。导致两种情况。

自动属性允许您保持代码更有条理短,这有利于您的代码可维护性和可读性,因此您应该尽可能地选择它们

我们将把“在没有自动属性的字段中你可以分配默认值”主题放在一边( 同样,现在也可以在c#6.0中的自动属性中 ),有时候,你想在内部运行更多的代码。 getset属性的方法,如调用event句柄或validation值,这是标准属性声明进入图片的位置,例如:

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

在一行中,因为明确键入代码并将其保持在一行中没有至关重要的意义允许我将这样的属性与方法区分开来,这些方法一目了然地跨越多行。