为什么不直接使用类字段?

Bon*_*nev 4 c# c++ properties class

所以我知道类和结构是数据的结构.类字段默认为私有字段和结构字段 - 公共字段.喜欢public: / int a;C++和public int a;C#

但是访问这些字段的其他方法是将它们设为私有并使用函数/方法.喜欢SetValue(int value){a = value;}和/ GetValue() { return a; }或者我甚至听说过{set; get;}C#的新酷.

为什么呢?许多人告诉我'其他人可以通过这种方式访问​​你的变量,所以让他们私有化'.我不明白,它有什么区别让它们公开,只是使用它们obj.a = 3;或让它们变得私密和干嘛obj.SetValue(3);?有人(甚至可以简要地)解释一下这些差异是什么以及如何在他们公开的时候进入这些领域?

MAV*_*MAV 5

您希望使用属性(getter和setter)而不是公共字段(实例变量公开)的原因有很多.他们之中有一些是:

  • 您可以允许对外部类进行只读访问(通过提供getter,但不提供setter)
  • 您可以在访问时计算该值.
  • 您可以在不破坏现有代码的情况下更改访问/计算值的方式.
  • 您可以在不破坏现有代码的情况下更改内部表示.
  • 您可以覆盖子类中的属性,这对于字段是不可能的.
  • 等等.

此外,使用属性并没有太多的缺点.所以优点胜过缺点.

  • ..如果你正在描述它们的setter/getter,那么你可以省略它们并使用公共成员,但是,在这种情况下,许多程序员仍然使用setter/getter来保持代码的统一. (3认同)