为了账号安全,请及时绑定邮箱和手机立即绑定

属性与字段:需要帮助来掌握属性在字段上的使用

属性与字段:需要帮助来掌握属性在字段上的使用

C#
慕工程0101907 2019-12-04 10:26:44
首先,我已经阅读了有关该主题的帖子列表,并且由于了解封装和字段修饰符(private,public..ect),因此我不了解属性。我已经学到的C#的主要方面之一是使用封装在代码中保护数据的重要性。我“认为”我理解这是因为使用了修饰符(私有,公共,内部,受保护)的能力。但是,在了解了属性之后,我不仅在理解属性使用方面,而且在理解C#中数据保护的总体重要性/能力(我理解为封装)时也感到困惑。更具体地说,我在使用C#属性时所读的所有内容是,由于以下原因,您应尝试使用它们代替字段:1)它们允许您在直接访问字段时无法更改数据类型。2)它们为数据访问添加了一定程度的保护但是,从我的“想法”开始,我发现使用字段修饰符确实是#2,除非您没有理由更改类型(#1),否则在我看来属性只是生成了附加代码-因为您是(或多或少)创建隐藏方法来访问字段,而不是直接访问字段。然后可以将整个修饰符添加到“属性”中,这使我对属性访问数据的需求的理解更加复杂。我已经阅读了不同作者关于“属性”的许多章节,但没有一章真正说明了对属性vs.字段vs.封装(以及良好的编程方法)的良好理解。有人可以解释:1)为什么我要使用属性而不是字段(特别是当它出现时,我只是添加其他代码2)在跟踪其他人的代码时,关于识别属性的使用并且不将其视为简单的方法(除了get; set是显而易见的)的任何技巧?3)关于什么时候使用什么好的编程方法有什么通用的经验法则?谢谢,很抱歉,我的帖子很长-我不想只问一个100x的问题,而又不解释为什么再次问这个问题。
查看完整描述

3 回答

?
弑天下

TA贡献1818条经验 获得超7个赞

您不必担心通过属性访问字段所需的额外代码,它会被JIT编译器“优化”(通过内联代码)。除非它太大而无法内联,否则无论如何您都需要额外的代码。


而且用于定义简单属性的额外代码也很少:


public int MyProp { get; set; } // use auto generated field.

当您需要自定义时,您以后总是可以定义自己的字段。


因此,您剩下了额外的封装/数据保护层,这是一件好事。


我的规则:总是通过属性公开字段


查看完整回答
反对 回复 2019-12-04
?
四季花海

TA贡献1811条经验 获得超5个赞

关于Properties的好处之一是,getter和setter可以具有不同的访问级别。考虑一下:


public class MyClass {


  public string MyString { get; private set; }


  //...other code

}

只能在内部(例如在构造函数中)更改此属性。阅读有关依赖注入的信息。构造函数注入和属性注入都通过某种形式的外部配置处理属性设置。那里有很多框架。如果您深入研究其中的一些内容,将会对属性及其使用有很好的了解。依赖注入还将帮助您解决有关良好实践的第三个问题。


查看其他人的代码时,您可以分辨某些东西是方法还是属性,因为它们的图标不同。同样,在Intellisence中,属性摘要的第一部分是单词Property。


查看完整回答
反对 回复 2019-12-04
  • 3 回答
  • 0 关注
  • 415 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信