【发布时间】:2011-07-09 08:50:32
【问题描述】:
我是 C# 新手
有什么区别
public string MyValue;
和
public string MyValue { get; set; }
我一直认为两者都是一样的。我的代码中有些东西不起作用。使用后一种形式使其工作。但是不知道有什么区别。你能帮忙吗?
谢谢
【问题讨论】:
标签: c#
我是 C# 新手
有什么区别
public string MyValue;
和
public string MyValue { get; set; }
我一直认为两者都是一样的。我的代码中有些东西不起作用。使用后一种形式使其工作。但是不知道有什么区别。你能帮忙吗?
谢谢
【问题讨论】:
标签: c#
第一个是字段,而不是属性。看看这个问题:
What is the difference between a Field and a Property in C#?
【讨论】:
第一个是公共字段,第二个是自动实现的公共属性。
它们不一样。使用自动实现的属性,编译器将生成一个私有的支持字段。
虽然两者都可以作为从类中公开数据的一种方式,但您应该按照信息隐藏原则使用属性 - 字段应该是私有的并且只能通过属性访问。这允许您在不中断调用者的情况下对实现进行更改。
【讨论】:
如果“后者使它起作用”,您可能正在使用数据绑定;数据绑定通常只对属性(而不是字段)起作用。这些可以是显式属性,也可以是像您的示例中那样自动实现的属性。
请注意,如果您使用 BinaryFormatter(无论如何 IMO 存在严重缺陷),从字段更改为属性可能会破坏序列化,但属性非常优于字段。绝对做出这个改变;p
【讨论】:
这些实际上是非常不同的结构。
这种形式是为数据实际分配内存的唯一方法:
string MyData;
这称为“字段”。
这种形式被称为“自动实现的属性”:
string MyData { get; set; }
编译器将其翻译成这样的:
string myDataField;
string MyData
{
get { return myDataField; }
set { myDataField = value; }
}
因此,您可以看到它们非常不同,但它们最终都创建了一个存储字段。但是,使用该属性可以为未来提供更大的灵活性。
【讨论】: