我想象的简单问题,但是这些代码行有什么区别:
代码1
public int Temp { get; set; }
和
代码2
private int temp;
public int Temp { get { return temp; } }
我的理解是,代码 1 中的自动属性将执行与代码 2 完全相同的功能?
我正在阅读《Head First C#》,我发现很难理解为什么它使用两种不同的方式来完成同一件事?
Code1 和 Code2 之间的主要区别在于,在 #1 中,该属性是可设置的。
您可以使用自动属性实现相同的效果,因为 setter 可以是私有的:
public int Temp { get; private set; }
自动属性是在 C#3 中添加的,实际上只是使用字段的较长版本的语法糖。如果您不需要直接访问该字段,则没有理由不使用自动属性。自动属性相当于使用字段 - 编译器为您生成字段,只是在代码中无法访问它。
“automagic”属性只是一个“简写”符号:
public int Temp { get; set; }
比
简单得多public int Temp
{
get { return _temp; }
set { _temp = value; }
}
但功能相同。只是一个很好的“速记”来提高您的工作效率,但实际上没有额外或神奇的功能。
第一个是可写属性。
相当于
private int temp;
public int Temp {
get { return temp; }
set { temp = value; }
}
(除了不能直接使用backingfield),但它需要1行代码而不是5行代码。
当编写具有 5 或 6 个简单属性的类时,自动属性可以使类变得更短。
您可以通过写入来制作只读自动属性
public int Temp { get; }
如果您的第二个示例同时具有 getter 和 setter,那么它们在功能上是等效的。
就目前情况而言,第一个是可公开获取的,但不能公开设置。您还可以使用自动属性实现相同的目标:
public int Temp { get; private set; }
如果您好奇,自动属性仍然有一个支持私有字段。这一点只是由编译器为你处理,这样生活就更容易了。
我之所以使用带有支持字段的属性,是因为我想在获取或设置属性时做其他事情。例如,嵌入到属性本身的验证例程,或缓存等......
否则,为了简单的获取和设置,我将使用自动属性格式。它更紧凑并且涉及更少的编码,我认为这是一件好事。