当前位置:  开发笔记 > 编程语言 > 正文

扩展Class类是合法的吗?

如何解决《扩展Class类是合法的吗?》经验,为你挑选了1个好方法。

我一直在编写一个系统,在运行时生成一些模板,然后根据这些模板生成一些对象.我有一个想法,模板可能是Class类的扩展,但这导致了一些宏伟的错误:

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

我想知道的是,如果子类化Class甚至可能,如果有可能在某些情况下这样做是合适的,而不仅仅是对OOP的严重滥用.我相信它应该是可能的,因为ActionScript允许您创建Class类型的变量.这个用法在Class的LiveDocs条目中描述,但我没有看到子类化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子类实例的实例是什么类型的?



1> Matt..:

从第一段中的livedoc开始,它声明Every Class object is an instance of the Class class.,因为任何类对象已经是一个类,所以扩展Class会是一个错误.

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

当您的模板未提供任何实现时,应使用接口.也就是说,您声明了一堆字段和方法,但没有提供方法的实现.您可以按如下方式声明这样的类:

public interface Foo {
    function bar:void;
}

现在创建一个实现此接口的类,您只需执行以下操作.

public class MyClass implements Foo {
    function bar:void {
        ..... implementation goes here .....
    }
}

类可以实现多个接口,而它可以只扩展一个类.

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

希望这可以帮助.

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有