1

假设我有一个定义的 ClassA。ClassB 扩展了 ClassA,舞台上有一个与 ClassB 链接的 Movie Clip 实例。

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 得到的一个想法,我似乎找到了最适合我需要的解决方案。

B类:

private static var _instance:ClassB;

public function ClassB() { // constructor
    _instance = this;
}


public static function get FUN_GetInstance():ClassB {
 return _instance; 
}

在 C 类中:

private var MC_VariablesContainer:ClassB
MC_VariablesContainer:MC_ClassB = ClassB.FUN_GetInstance
4

2 回答 2

2

并且仅当访问的变量是公共的或内部的时才有效,具体取决于 ClassC 属于哪个包。我想知道是否有更好、更清洁的方法来实现这一点。

这是 OOP 的基本原则之一。您无法获得私有和受保护的属性或方法。如果你想获得它们,你应该将它们公开或内部。

于 2012-01-09T16:06:11.633 回答
1

A)不要这样做,考虑更好的架构,尊重封装松散耦合。

B)如果必须这样做,您可以使用静态全局寄存器并将所有阶段实例(如您的 ClassB)分配给它,例如:

B类:

StaticRegister.assign(this);

在静态寄存器中:

publis static var register : Array = [];

public static function assign(instance : Object) : void {
   array.push(instance);
}

然后以类似的方式将其从那里取出。但是这样做真的很肮脏。

C)如果只有一个 ClassB 实例,您可以给它静态 - 单例 - 访问器:

B类:

private static var instance : ClassB;  

publis static function getInstance() : ClassB {
  return instance;
 }

在构造函数中:

public class ClassB() {
   instance = this;
}

有关完整单身人士的更多信息:www.actionscript.org或 Google 或 Wikipedia。

于 2012-01-09T15:57:35.633 回答