静态方法需要使用静态属性吗?

时间:2009-12-28 22:28:49

标签: actionscript-3 actionscript static static-methods

我正在使用as3。只是一个简单的问题。 如果我创建了一个静态方法。说我决定在静态方法中调用其他方法。我呼吁的那些方法也需要是静态的吗?如果我使用了一些属性。不要永久存储数据,而只是在该过程中存储数据。这些属性是否需要是静态的?

3 个答案:

答案 0 :(得分:1)

是。如果有什么叫static,那意味着它不是与当前的类实例相关,而是与整个类相关,因此它必须与实例无关,例如,如果需要,使用其他静态字段和方法。

答案 1 :(得分:1)

不,他们没有。您可以在静态方法中使用任何类型的变量/方法,当然也包括局部变量。但是,静态方法中没有“this”的概念,因为该方法不是在实例上执行,而是在类本身上执行。因此,以下(在类声明中)是非法的:

public var myInstanceVariable : int;

public static function myStaticMethod() : void
{
  // Illegal:
  myInstanceVariable = 1;

  // Illegal (same as above, "this" is implicit):
  this.myInstanceVariebl = 1;

  // This however is legal (local variable):
  var localVal : int = 1;
}

上面对 myInstanceVariable 的引用是非法的,因为该变量是一个实例变量,静态方法无法访问该变量。因为静态方法首先不在实例上执行,所以“this”特殊变量无效。

如果您愿意,可以保留对实例的静态引用,并在所述实例上执行方法。这是普通单身人士模式背后的关键理念。

 private static var _INSTANCE : MyClass;

 public static function myStaticFunction() : void
 {
   _INSTANCE.doSomething();
 }

这里,可以从静态方法引用_INSTANCE变量,因为变量本身被声明为static。

答案 2 :(得分:1)

为避免混淆,实际上您回答了两个问题:

静态方法中的方法调用需要是静态的吗? Li0liQ回答了这个问题。

静态方法中使用的变量是否需要是静态的? richardolsson回答了这个问题。

总而言之,在静态方法中,如果在静态方法的范围内定义局部变量,则只能访问静态变量和方法。

private var instanceVar : MyClass;
private static var staticVar : MyClass;

public static function myStaticFunction() : void
{
    // Illegal, instance variable

    instanceVar = new MyClass( 1 );

    // Illegal, method on instance variable

    instanceVar.someMethod();

    // Legal, scoped local variable

    localVar : MyClass = new MyClass( 1 );

    // Legal, method on scoped local variable

    localVar.someMethod();                        

    // Legal, static variable

    staticVar = new MyClass ( 1 );

    // Legal, method on static variable

    staticVar.someMethod();
}

如果你稍微考虑一下它是有道理的,但它起初并不是一个完全清晰的概念。