有和没有{get;组; }

时间:2011-03-05 10:54:33

标签: c#

我是C#

的新手

之间有什么区别
public string MyValue;

public string MyValue { get; set; }

我一直认为两者都是一样的。我的代码中有些东西没有用。使用后一种形式使其有效。但不知道有什么区别。你能帮忙吗?

由于

5 个答案:

答案 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)