为什么在C#中对私有字段使用公共属性?
如果我将一个类成员设为私有,然后我想访问该成员,那么必须为该成员定义一个公共属性。但是我想知道:如果我们可以通过声明类成员的公共属性来公开使用该类成员,那么为什么我们不将该类成员本身定义为公共的呢?因为您可以验证属性中的指定值。属性访问器(get,set方法)允许您在将来更改实现。例如,您可以从一个支持字段(私有类成员)开始,但稍后该属性可能会成为某些计算的结果。此外,属性语法允许您拥有只读成员,因此您只能在类内部更改值,外部世界只能读取该值。出于二进制兼容性的原因,Microsoft建议使用公共属性代替公共字段。只有在编写库(其他程序将访问该库)时,这才是一个问题 基本上,想象一下这个场景:为什么在C#中对私有字段使用公共属性?,c#,properties,C#,Properties,如果我将一个类成员设为私有,然后我想访问该成员,那么必须为该成员定义一个公共属性。但是我想知道:如果我们可以通过声明类成员的公共属性来公开使用该类成员,那么为什么我们不将该类成员本身定义为公共的呢?因为您可以验证属性中的指定值。属性访问器(get,set方法)允许您在将来更改实现。例如,您可以从一个支持字段(私有类成员)开始,但稍后该属性可能会成为某些计算的结果。此外,属性语法允许您拥有只读成员,因此您只能在类内部更改值,外部世界只能读取该值。出于二进制兼容性的原因,Microsoft建议使用公
- 创建一个带有公共字段的库
- 其他人编写的程序使用您的库并访问该公共字段
- 现在,您希望将字段更改为公共属性,因为您需要验证输入值,或者该属性已成为计算结果,或者您希望它抛出异常,因为它已过时,或者诸如此类
- 用户尝试升级您的库,但不升级使用库的程序
当然,这只与图书馆有关。在所有其他情况下,建议并不真正相关,如果愿意,可以使用字段。如果您以后发现需要一个属性,您仍然可以将其更改为属性,然后您的程序仍然可以正常编译。以下是我们使用公共属性而不是公共字段的一些原因
使用属性的原因很简单。根据您的工作,您始终可以在不中断任何外部程序的情况下更改代码处理获取/设置其值-这在字段中是不可能的。此外,属性可以标记为虚拟属性,因此可以由子类重新定义,而不会破坏任何兼容性。你在问什么?那(一句话)是无法理解的。我已经对它进行了大量的编辑。我想这就是他的意思。我认为最后一句“…首先是私人的”应该改为“…首先是公共的”。这句话的可能重复并不是一个真正的论点,因为如果你以后发现有必要这样做,你仍然可以介绍该物业。@Timwi,我认为将成员更改为属性将强制使用.dll中的类型的代码重新编译。虽然这对大多数人来说不是问题,但如果您是为第三方用户分发.dll,则应该避免这种情况。是的,但正如您自己指出的,它只适用于库。您的答案没有说明这一点。此参数适用于只读属性,但不适用于读/写属性。如果你后来发现需要一个属性,因为它变成了一个计算值,那么你仍然可以引入这个属性。非常好的解释。