0

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

4

3 回答 3

1

是的。如果调用了任何内容static,则意味着它与类的当前实例无关,而是与整个类相关,因此它必须与实例无关,例如,如果需要,使用其他静态字段和方法。

于 2009-12-28T22:34:48.147 回答
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 变量可以从静态方法中引用,因为变量本身被声明为静态的。

于 2009-12-28T22:37:53.397 回答
1

为避免混淆,您提出的两个问题实际上都有答案:

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

静态方法中使用的变量是否需要是静态的? 理查多尔森回答了这个问题。

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

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();
}

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

于 2009-12-28T23:05:39.410 回答