定義されたClassAがあるとしましょう。ClassBはClassAを拡張し、ClassBにリンクされたステージ上にMovieClipインスタンスがあります。
ClassCは、ClassBを拡張したり、ClassBの新しいインスタンスを作成したりせずに、ClassBのプロパティとメソッドにどのようにアクセスしますか?
私が現在行っている方法は、ClassBにリンクされたステージインスタンスを参照し、ドット構文を使用してClassBインスタンス変数にアクセスすることです。これは、アクセスされた変数がパブリックまたは内部である場合にのみ機能します。これは、ClassCがどのパッケージに含まれているかによって異なります。の。これを達成するためのより良い、よりクリーンな方法があるかどうか知りたいです。
編集:コード例。
package com.core.stage.classes {
import flash.display.MovieClip;
public class ClassA extends MovieClip {
public var classAvar:uint = 0;
public function ClassA() {
}
protected function classAfunction(funPar:uint):void {
classAvar = 2 * funPar;
}
}
}
package com.core.stage.classes {
import com.core.stage.classes.ClassA;
public class ClassB extends ClassA {
public function ClassB() {
classAfunction(10);
}
}
}
package com.core.stage.classes {
import flash.display.MovieClip;
public class ClassC extends MovieClip {
private var classBreference:*;
public function ClassC() {
classBreference = Object(parent);
trace(classBreference.classAvar); // Outputs 20.
}
}
}
したがって、基本的に知りたいのは、ClassCでの作業中にclassAvarの値(ClassAで宣言され、ClassBのメソッドを呼び出した後に値を取得)を取得するためのより良い方法があるかどうかです。
解決済み:
わかりました。いくつかの調査とdaniel.sedlacekから得たアイデアの結果、自分のニーズに最適なソリューションを見つけたようです。
ClassBの場合:
private static var _instance:ClassB;
public function ClassB() { // constructor
_instance = this;
}
public static function get FUN_GetInstance():ClassB {
return _instance;
}
ClassCの場合:
private var MC_VariablesContainer:ClassB
MC_VariablesContainer:MC_ClassB = ClassB.FUN_GetInstance