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