我是C#
的新手之间有什么区别
public string MyValue;
和
public string MyValue { get; set; }
我一直认为两者都是一样的。我的代码中有些东西没有用。使用后一种形式使其有效。但不知道有什么区别。你能帮忙吗?
由于
答案 0 :(得分:22)
第一个是公共领域,第二个是自动实施的公共财产。
他们不一样。使用auto实现的属性,编译器将生成一个私有支持字段。
虽然两者都可以作为从类中公开数据的方式,但您应该遵循信息隐藏原则使用属性 - 字段应该是私有的,并且只能通过属性访问。这允许您在不破坏调用者的情况下对实现进行更改。
答案 1 :(得分:9)
如果“后者使它工作”,你可能正在使用数据绑定;数据绑定通常仅适用于属性(不是字段)。这些可以是显式属性,也可以是自动实现的属性,如示例所示。
请注意,如果您使用BinaryFormatter
(IMO无论如何都存在严重缺陷),从字段更改为属性可能会破坏序列化,但属性非常优先于字段。绝对做出这种改变; p
答案 2 :(得分:5)
第一个是字段,而不是属性。看看这个问题:
What is the difference between a Field and a Property in C#?
答案 3 :(得分:4)
这些实际上是非常不同的结构。
此表单是实际为数据分配内存的唯一方法:
string MyData;
这称为“字段”。
此表单称为“自动实现的属性”:
string MyData { get; set; }
编译器将此转换为以下内容:
string myDataField;
string MyData
{
get { return myDataField; }
set { myDataField = value; }
}
因为你可以看到它们非常不同,但它们最终都会创建一个存储区域。但是,使用该属性可以提供更多的未来灵活性。
答案 4 :(得分:0)