【问题标题】:does static methods need to use static properties?静态方法需要使用静态属性吗?
【发布时间】:2009-12-28 22:28:48
【问题描述】:

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

【问题讨论】:

    标签: actionscript-3 actionscript static static-methods


    【解决方案1】:

    是的。如果有任何东西被称为static,这意味着它与类的当前实例无关,而是与整个类相关,因此它必须与实例无关,例如如果需要,请使用其他静态字段和方法。

    【讨论】:

    • 好的,总结一下。唯一可以与静态方法一起使用的变量和方法是其他静态方法和变量。或者!!属于静态方法范围的变量。正确吗?
    • 是的。在方法中声明的所有内容都称为“本地”,无论方法是否为静态,都可以使用。
    【解决方案2】:

    不,他们没有。您可以在静态方法中使用任何类型的变量/方法,当然包括局部变量。但是,静态方法中没有“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 变量可以从静态方法中引用,因为变量本身被声明为静态的。

    【讨论】:

      【解决方案3】:

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

      静态方法中的方法调用是否需要是静态的? 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();
      }
      

      稍微想一想还是有道理的,但一开始并不是一个完全清晰的概念。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-30
        • 2013-02-13
        • 2014-02-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多