0

だから - クラスのインスタンスがたくさんあり、それらすべてで呼び出したい関数があります。私が持っているすべてのインスタンスをループするのではなく、呼び出されたときに各インスタンスで実行されるクラスで関数を宣言できる方法はあるのでしょうか? たとえば、私のクラスが次のようになっているとします。

public class MyClass{

    public var variable:String = "";

    public function MyClass(){}

    public function myFunction():void{
       this.variable = "BLORE";
    }
}

そして、私はこれらの束を持っています:

var class1:MyClass = new MyClass();
var class2:MyClass = new MyClass();

MyClass.myFunction()呼び出して、すべてのインスタンスで呼び出す方法はありますか?

これをうまく説明できているかどうかわかりませんが、そうです。「インスタンスを配列またはベクトルに入れて、本物の人間のようにそれらをループする」だけでなく、提案があればうれしいです。

4

2 に答える 2

1

これを実現する方法の簡単な例を次に示します。

package {
    public class Example {
        public static var instances:Array;

        public function Example() {
            if ( !instances ) {
                instances = [];
            }
            instances.push( this );
        }

        public static function setPropertyOnAll( property:String, value:Object ):void {
            var l:uint = instances.length;
            for ( var i:uint = 0; i < l; i++ ) {
                instances[i][property] = value;
            }
        }
    }
}

基本的に、クラス内に静的配列があり、インスタンス化時にそのクラスの各インスタンスを配列にプッシュします。次に、配列をループしてプロパティを変更します。

次の点に注意してください。

  • が存在しない場合のエラー処理はありpropertyません。そのため、渡すプロパティsetPropertyOnAllが実際にプロパティであることを確認するか、何らかのエラー チェックを追加して確認してください。
  • 各インスタンスを配列に保存すると、ガベージ コレクションの対象外になります。これは明らかに非常に悪いです。これを行う場合、毎回手動で行う必要がある場合でも、アレイから各インスタンスを削除する方法を作成する必要があります。どのように/いつ実行するか、またはクラス構造がどのように見えるかを知ることは不可能であるため、私はこれを行いませんでした。それらをガベージコレクションの対象外にしたくない
于 2013-08-07T21:08:20.677 に答える