有人可以解释一下使用Auto-Implemented Properties c#后面的想法吗?
public class Customer
{
public int ID { get; set; }
public string Name { get; set; }
}
我有动力使用私有字段的属性,因此我们可以确定如何访问私有字段。但在这里 - 就像从一开始就将这个领域定义为公开一样。没有?
将字段定义为“public const”或将其定义为只具有get-only属性有区别吗?
答案 0 :(得分:16)
公共自动属性与公共字段不同,它们不是二进制兼容的。如果您实现了一个公共字段,并且稍后想要添加一些逻辑,则必须将其更改为属性,从而引入重大更改(因为二进制不兼容)。这就是为什么许多约定声明你不应该公开公共字段而是使用属性的原因。
因此,自动属性只是任何简单的非私有类值成员的一个方便的起点,允许以后添加逻辑,同时保持二进制兼容性。
答案 1 :(得分:5)
属性可以是数据绑定,而字段不能。
答案 2 :(得分:3)
自动实现的属性基本上是语法糖。编译后,后备存储存在。它只是源代码中没有。
正如其他人所说,属性和字段不相同。字段和属性不兼容,因此在它们之间进行更改是一个重大变化。此外,您不能将数据绑定用于字段。
最后一点。虽然在您的情况下,示例和公共字段之间的功能差异很小,但您可以更改其中一个访问者的可见性。因此,要使用自动属性创建只读属性,您可以执行以下操作:
public int ID { get; private set; }
在这种情况下,get访问器是公共的,根据整个签名,但set访问器是私有的。
答案 3 :(得分:2)
我会让MSDN在这里说话....
“在C#3.0及更高版本中,当属性访问器中不需要额外的逻辑时,自动实现的属性使属性声明更简洁。它们还使客户端代码能够创建对象。当您声明属性如图所示在以下示例中(参见MSDN文章),编译器创建一个私有的匿名支持字段,只能通过属性的get和set访问器“
进行访问可能最有利的区别是您可以进行事前/事后验证,提升PropertyChanged
事件等
将字段定义为“public const”或将其定义为只具有get-only属性之间有区别吗?
是的,get-only字段必须具有私有字段声明。该字段可以在内部由类更改,将字段标记为const表示不能进行修改。
答案 4 :(得分:1)
2:必须在编译时定义公共const,不能使用引用对象。只有从System.ValueType(string,int,double,...)继承的类
const也是静态的,而只有getter的属性不是(每个类都有自己的实例。)
答案 5 :(得分:0)
关于1:建议使用自动实现的属性,因为您可以在以后实现其他逻辑而不会中断更改。可以在Learning about Auto-Implemented Properties
找到此示例