C# - 自动属性和返回支持字段之间的区别?

时间:2011-01-04 13:46:01

标签: c# field automatic-properties

我想象的简单问题,但这些代码行之间的区别是什么:

代码1

public int Temp { get; set; } 

代码2

private int temp;
public int Temp { get { return temp; } }

我的理解是,根据代码1的自动属性将执行与代码2完全相同的功能?

我正在阅读Head First C#,我发现它很难理解为什么它使用两种不同的方式做同样的事情?

5 个答案:

答案 0 :(得分:7)

Code1和Code2之间的主要区别在于,在#1中,属性是可设置的。

您可以使用自动属性实现相同的功能,因为setter可以是私有的:

public int Temp { get; private set; }

在C#3中添加了自动属性,对于使用字段的较长版本来说,它实际上只是语法糖。如果您不需要直接访问该字段,则没有理由不使用自动属性。自动属性等同于使用字段 - 编译器为您生成字段,但在代码中无法访问它。

答案 1 :(得分:2)

第一个是可写属性。

相当于

private int temp;
public int Temp { 
    get { return temp; } 
    set { temp = value; }
}

(除了你不能直接使用支持字段),但它需要1行代码而不是5行代码 在编写具有5或6个简单属性的类时,自动属性可以使类更短。

您可以通过编写

来创建只读自动属性
public int Temp { get; private set; }

答案 2 :(得分:2)

“自动”属性只是一种“简短”符号:

public int Temp { get; set; } 
输入比

简单得多
public int Temp 
{   
   get { return _temp; }
   set { _temp = value; } 
}

但功能相同。只是一个很好的“速记”来提高你的工作效率,但真的没有额外的或神奇的功能。

答案 3 :(得分:1)

如果您的第二个示例同时具有getter和setter,则它们在功能上是等效的。

目前看来,第一个是公开获取但不能公开设置。您也可以使用自动属性实现相同的功能:

public int Temp { get; private set; }

如果您感到好奇,自动属性仍会获得支持私有字段。这一点只是由编译器为您处理,以便生活更轻松。

答案 4 :(得分:0)

至于我在后台字段中使用属性的原因是我想在获取或设置属性时执行其他操作。例如,嵌入到属性本身的验证例程,或缓存等......

否则,对于简单的get和set,我会使用自动属性格式。它更紧凑,编码更少,我认为这是一件好事。