flash - 扩展 Class 类是否合法?

标签 flash actionscript-3 oop metaprogramming

我一直在写一个系统 在运行时 生成一些模板,然后根据这些模板生成一些对象。我认为模板可以是 Class 类的扩展,但这导致了一些严重的错误:

VerifyError: Error #1107: The ABC data is corrupt, attempt to read out of bounds.

我想知道的是,如果子类化 Class 甚至是可能的,是否在某些情况下这样做是合适的,而不仅仅是对 OOP 的严重滥用。我相信这应该是可能的,因为 ActionScript 允许您创建 Class 类型的变量。 LiveDocs entry for Class 中描述了这种用法。 ,但我没有看到提到子类化。

这是一个伪代码示例:
class Foo extends Class

var A:Foo = new Foo(); // A is a class
trace(A is Class); // true, right?
var b = new A(); // b is an instance of class A

我不知道 b 的类型是什么将会。会是这个吗?
trace(b is A); // true?

但是,你能输入变量b吗?输入 A ,如 var b:A = new A(); , 即使 A直到运行时才存在?我已经读到这是不可能的 A不是静态可解决的,但我正在做自己的测试来探索这种可能性。

最终目的是生成新的类在运行时 ,然后创建这些类的实例。

总而言之:你可以继承 Class 类吗?如果是这样,你怎么能做到没有错误,Class子类的实例的实例是什么类型?

最佳答案

从第一段的 livedoc 中可以看出 Every Class object is an instance of the Class class.因此,扩展类是错误的,因为任何类对象已经是一个类。

你说a system that generates some templates, and then generates some objects based on those templates.听起来您真正想做的是创建一个界面。

当您的模板不提供任何实现时,应使用接口(interface)。也就是说,您声明了一堆字段和方法,但没有提供方法的实现。
您将声明这样一个类,如下所示:

public interface Foo {
    function bar:void;
}

现在要创建一个实现此接口(interface)的类,您只需执行以下操作。
public class MyClass implements Foo {
    function bar:void {
        ..... implementation goes here .....
    }
}

一个类可以实现多个接口(interface),而它可以只扩展一个类。

但是,如果您想在模板类中提供任何实现,那么您最好只创建一个具有其子类所具有的任何共性的类,并且只使用普通的旧继承。

希望这可以帮助。

关于flash - 扩展 Class 类是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2614340/

相关文章:

c++ - 动态多态性和运算符重载的真实示例

flash - swfender(swftools)批量输出为png

javascript - 延迟加载 Flash 对象

flash - 在线 Flash 游戏的轮询与套接字服务器

c++ - 大小未知的数组作为类成员,用于在运行时制作数组对象(对象创建时间)

Javascript/Angular : Bind function to every object or make helper object?

django - 从麦克风录制音频并另存为.wav django Web应用

java - 用Java解析一个大的XML节点

css - Flex CSS 不支持对齐操作?

javascript - 动态加载 swf 后无法与 Flex 中的 Javascript 进行通信