我一直在写一个系统 在运行时 生成一些模板,然后根据这些模板生成一些对象。我认为模板可以是 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/