成员变量和成员属性的区别?在某些情况下,我在类的顶部声明了一个成员变量,然后声明了一个属性来访问或设置该成员变量,但我问自己,如果仅从类中访问和设置变量而没有任何内容,那么该属性是否是必需的否则,那么使用属性访问和设置成员变量而不是直接对成员变量本身进行操作有什么好处。这是一个例子:publicclassCar{intspeed;//如果Car只设置和获取它,这就足够了吗?publicCar(intinitialSpeed){速度=initialSpeed;}//这实际上是必要的吗,它是否仅用于设置和获取成员//变量,或者它是否为其增加了一些好处,例如缓存,如果是这样,//缓存如何与属性一起使用。publicintSpeed{get{returnspeed;}set{speed=value;}}//哪个更好?publicvoidMultiplySpeed(intmultiply){speed=speed*multiply;//第1行this.Speed=this.Speed*multiply;//第2行//多次改变速度值speed=speed+speed+speed;速度=速度*速度;速度=速度/3;速度=速度-4;}}上面,如果我没有设置Speed属性,得到可变速度,我决定把intspeed改成intspd,我就不会不管用??在什么地方都不改speed为spd,但是如果我使用像Speed这样的属性来设置和获取速度,我只需要在属性的获取和设置中更改spd的速度,所以在我的MutilplySpeed方法中,类似于上面的Speed=this.Speed+this.Speed+this。速度不会断。如果一个变量是私有的,我通常不会为它创建属性。如果它以任何方式暴露在类型之外,出于不同的原因,我总是通过属性暴露它:此外,如果字段通过属性暴露,我总是通过属性访问它,即使是在类中也是如此。更新响应您更新的代码示例:此处的代码设计有很多注意事项。一个典型的建议(我发现它非常好)是“为了清晰,为了性能测试”。这意味着当你写代码的时候,你首先考虑的是代码看的时候是否清晰。这通常(但不总是)比代码的原始速度更重要。确定从哪里获取时写入速度优化。访问属性比直接读取字段稍微慢一些,但在大多数情况下,差异可以忽略不计(如果可以测量的话)。Primefaces可能是个问题。鉴于您的代码示例,我们有场速度,通过属性Speed公开。如果MultiplySpeed方法需要对值进行多次更新,这些中间值会在计算的不同时刻通过Speed属性提供。无论您是直接更新字段还是通过属性更新字段,都是如此。在这种情况下,最好先将值放入局部变量,用它进行计算,完成后将该变量的值赋值回属性。最后,其他副作用。可能正在改变Speed的值应该引发一个事件(例如SpeedChanged)。在这种情况下,在计算完成之前不要更新也是一个好主意。我喜欢将属性视为契约,将字段视为实现。任何需要价值的人(我的类型的核心除外)都应该使用合同。只有在有充分理由绕过合同的情况下,才应依赖实施。是的,如果您将对字段的访问封装在一个属性中,那么更改字段名称自然会需要更少的更新(并且字段名称也可能变得不那么重要)。我希望这是有道理的,并且不会太离题;)我同意弗雷德里克的回答。使遵循他的建议的工作稍微少一些的一件事是使用自动属性。这些只是自动生成标准getter/setter逻辑的属性。您没有得到任何验证,但您可以用标准属性替换自动属性。此替换不是重大更改。这里我把例子中的Speed属性换成了automatic属性。请注意,成员变量消失了,您的类必须通过属性访问它。publicclassCar{publicCar(intinitialSpeed){Speed=initialSpeed;}publicintSpeed{get;放;}publicvoidMultiplySpeed(intmultiply){Speed*=multiply;您还可以使用另一种称为“使用私有集获取”样式的方法。这意味着getter是公开的,而setter是私有的。你这样定义它:publicintSpeed{get;私有集;关于你的问题。前缀,它通常是无关紧要的。唯一重要的是您定义了一个与成员变量同名的方法参数或局部变量。然后您可以使用它来访问成员变量。验证之类的事情可以在一个地方被覆盖。该成员是封装的,您需要担心来自其他类的验证和其他事情。在您当前的场景中,它并没有真正的区别,但是当您需要更改变量或需要添加行为时,使用属性会更容易,因为您只有一个地方需要更改它。它不添加缓存,但它确实允许一个一致的接口。想象一下,您将来必须通过添加常量来提高速度。使用成员变量会很困难,因为属性允许这样做。同样在类内部,您应该再次访问该属性以保持一致性(想象一下上面的场景,您有一个可以直接访问成员变量的类)。我所知道的唯一真正原因是是否从程序集主体外部访问该区域。在这种情况下,如果您想向该字段添加简单的功能(可能设置一个脏标志或验证更改),您必须将它更改为一个属性,该属性会更改调用程序集如何看待它,这也需要重建。在极少数情况下,您可能会发现您无法控制程序集,并且遇到了问题。不要让OO狂热者告诉您使用公共字段是错误的,尽管我可能同意自动属性使争论有点没有实际意义。事实是,在没有额外逻辑的情况下,公开声明的字段和具有私有后备存储的公共属性之间没有太大区别。话虽如此,使用属性仍然被认为是最佳实践。在每个人向我推断可扩展性之前,请记住,如果您以后需要添加功能,您可以保留带有属性的名称并为后备存储引入新名称,这样就不会出现重大更改。您忘记提及的一件事是,属性将帮助您扩展类。如果你的类设计得当,基类中的变量应该是私有的。没有实际财产的公共财产。您不能从扩展类访问这些私有变量。我们在谈论公共与私人,我不包括受保护的原因:)。只是一些值得一提的注意事项:这些只是一些常见的东西(我的2美分用于其中的大部分)。在我看来,语言设计是坏的。不应该有两种在语义上如此重叠的做事方式。属性/字段应该无缝地提供这两种方法的好处,具体取决于它们的使用方式。如果程序最少使用属性,则属性的行为应与字段相同。还有就是不需要声明emptyget;并设置;在这种情况下的方法。这些差异让我觉得是人为的。这是一种伟大的语言;大部分都很干净。这并不意味着它不应该“下次”改进。以上就是C#学习教程:成员变量和成员属性的区别?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
