有和没有{get; 组; }
我是C#的新手
有什么区别
public string MyValue;
和
public string MyValue { get; set; }
我一直认为两者都是一样的。 我的代码中有些东西没有用。 使用后一种forms使其有效。 但不知道有什么区别。 你能帮我吗?
谢谢
第一个是公共领域,第二个是自动实施的公共财产。
他们不一样。 使用auto实现的属性,编译器将生成一个私有支持字段。
虽然两者都可以作为从类中公开数据的方式,但您应该遵循信息隐藏原则使用属性 – 字段应该是私有的,并且只能通过属性访问。 这允许您在不破坏调用者的情况下对实现进行更改。
如果“后者使它工作”,你可能正在使用数据绑定; 数据绑定通常仅适用于属性(不是字段)。 这些可以是显式属性,也可以是自动实现的属性,如示例所示。
请注意,如果使用BinaryFormatter
(IMO无论如何都存在严重缺陷),从字段更改为属性可能会破坏序列化,但属性比字段更受欢迎。 绝对做出这种改变; p
第一个是字段,而不是属性。 看看这个问题:
C#中的Field和Property之间有什么区别?
这些实际上是非常不同的结构。
此表单是实际为数据分配内存的唯一方法:
string MyData;
这被称为“场”。
此表单称为“自动实现的属性”:
string MyData { get; set; }
编译器将其转换为以下内容:
string myDataField; string MyData { get { return myDataField; } set { myDataField = value; } }
因此,您可以看到它们非常不同,但它们最终都会创建一个存储区域。 但是,使用该属性可以提供更多的未来灵活性。
请检查一下…… 将私有成员封装为属性和定义没有私有成员的属性之间的区别是什么?
它可能有帮助……
- 为什么.NET XML将xlmns属性附加到我添加到文档的XmlElements? 我可以阻止它吗?
- Microsoft Teams中私人消息的传入Webhook
- 如何使用ASP.NET Identity Framework设置密码到期
- 套接字:有时(很少)数据包在接收期间丢失
- .net上的PDF查看器
- IIS 7配置数据库:以编程方式设置框架版本和托管管道模式
- 为什么ArrayList实现IList,ICollection,IEnumerable?
- C#检测usb设备ClassCode(usb设备类型)
- Response.End()vs HttpContext.Current.ApplicationInstance.CompleteRequest()