首先,我已经阅读了关于此主题的一系列帖子,但因为我理解封装和字段修饰符(private、public等)的含义,所以我不认为我掌握了属性的概念。
C#的一个主要方面就是通过封装来保护代码中的数据。我“认为”我理解了使用修饰符(private、public、internal、protected)的原因在于它们能够实现这种封装。然而,学习了属性后,我有些困惑,不仅是对属性的用途,还有封装(即我理解的数据保护)在C#中的整体重要性/能力。
更具体地说,当涉及到C#中的属性时,所有我所了解的内容都表明应该尽可能使用属性代替字段,因为:
1) 它们允许您在不能进行直接访问字段时更改数据类型。
2) 它们添加了一层数据访问保护。
然而,根据我之前了解的字段修饰符的作用,似乎它们也能实现 #2,那么对我来说,属性只是额外生成的代码,除非您有某些原因需要更改类型(#1),因为您正在(或多或少地)创建访问字段的隐藏方法而不是直接访问。
另外,修饰符也可以添加到属性中,这使我更加困惑了需要使用属性来访问数据的原因。
我从不同作家的“属性”章节中读了很多内容,但没有一个能真正解释清楚属性与字段、封装(以及良好的编程方法)之间的关系。
有人能够解释:
1)为什么我要使用属性而不是字段(特别是当它似乎只是添加了额外的代码)
2)如何识别属性并将其视为非常量方法(除了get;set;明显的情况),当跟踪其他人的代码时?
3)任何关于何时使用何种技术的一般准则吗?
感谢您阅读这篇长文并对此表示歉意- 我不想只是问一个已经被问了100次的问题而不解释为什么我会再次提出它。