OOP中的变量范围和引用

时间:2013-04-12 21:27:25

标签: oop variables object reference scope

在应该实例化的类中对函数进行编码时,一些变量仅暂时使用 - 例如作为for循环中的计数器 - 一些是全局变量,其他的被返回和/或“存储”在对象的实例中instance.variableinstance->variable ...取决于语法。< / p>

我的问题是,在所述函数中定义变量时,是否应始终使用object.variable =,或者如果我打算将其返回或为用户提供,我是否应该只使用它?

我不专业,所以我不确定我是否以正确的方式看待它,但从我看到它的原因有几个,我应该使用其中一个,以及一些优点总是使用object.variable

的缺点和缺点

variable

  • 如果范围应该只是定义它的函数,或者
  • 如果它是全局的(显然并非每个实例都是唯一的)。

object.variable

  • 如果它可以被其他方法或用户访问。
  • 如果每个实例都应该是唯一的。

  • 它始终可以在您设置的范围内访问,从而消除了可能的范围问题。
  • 可能会产生安全隐患。

我是以正确的方式看待这个吗?

1 个答案:

答案 0 :(得分:1)

您使用术语“变量”来指定三个不同的概念:

  • 函数中声明的变量是局部变量;
  • 在类中声明的变量是成员属性,或者是 实例变量;
  • 在类(和静态)中声明的变量是类变量

局部变量可以从声明它的块中访问 ,无论是条件,循环还是函数。您的循环计数器变量应为本地,因为您不会在其他地方使用它。另外,它不能是属性,因为它与您的实例无关。

使用:variable

成员属性是绑定到该实例的属性。它的特点是它。因此,在实例化对象之前,它不可用(并且不存在于内存中)。它在类中声明,但在任何方法之外。您还必须确定其可见性(公共,受保护,私有)。请参阅encapsulation

除非您有充分理由,否则请勿将会员标记为公开。

公共成员(无论是属性还是方法)都可以在课堂外以这种方式访问​​:

MyObject obj = new MyObject();
obj.myMethod();

如果您想在课程中使用它,例如,您可以使用variable。但是,使用this.variable是一种很好的做法:可以声明一个与属性同名的局部变量。如果你不遵守这个习惯,它可能会变成一场真正的噩梦。请注意,this关键字可能会因您使用的语言而异。

类变量/方法独立于创建的任何实例而存在。它存在于您创建新实例之前。无论该类存在多少个实例,都只有一个副本。就像实例成员一样,您必须设置可见性。 使用MyClass.member是一种很好的做法,无论是在课堂内还是课堂外。

我希望能回答你的问题。