as3を使用しています。簡単な質問です。静的メソッドを作成した場合。その静的メソッド内の他のメソッドを呼び出すことにしたとしましょう。私が呼び出すメソッドも静的である必要がありますか?一部のプロパティを使用した場合はどうなりますか。データを永続的に保存するのではなく、そのプロセス内でのみ保存します。それらのプロパティは静的である必要がありますか?
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();
}
少し考えれば理にかなっていますが、最初は完全に明確な概念ではありません。
はい。何かが呼び出された場合static
、それはクラスの現在のインスタンスではなくクラス全体に関連していることを意味します。したがって、インスタンスに依存せずに動作する必要があります。たとえば、必要に応じて他の静的フィールドやメソッドを使用します。
いいえそうではありません。もちろん、ローカル変数を含め、静的メソッド内から任意のタイプの変数/メソッドを使用できます。ただし、メソッドはインスタンスではなくクラス自体で実行されるため、静的メソッドには「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変数を参照できます。