根据指定项目文件夹中的class个文件动态创建对象

Create objects dynamically according to class files in specified project folder

我们有一个文件夹,其中有许多 class 继承自同一基础 class。他们的名字格式如下:

该程序应扫描此 class 文件夹并创建一个带有 class-名称前缀和计数的临时 table(f.ex "firsttypesubclass" 和计数=3):

DEFINE PUBLIC TEMP-TABLE TT_AllSubClasses NO-UNDO
   FIELD Name AS INT /* f.ex "firsttypesubclass" */
   FIELD Name AS INT /* f.ex "firsttypesubclass" */
.

然后我们需要在循环中根据找到的 classes 动态创建新实例,如下所示:

DEF VAR newInstance AS CLASS myBaseClass NO-UNDO.
newInstance = DYNAMIC-NEW TT_AllSubClasses.Name + "_" + STRING(1)(123123) NO-ERROR.

有什么方便的方法可以列出文件夹中的class个名字吗?或者是否有可能获取所有继承自 baseclass 的 classes?我正在考虑使用文件系统来检查文件。

您必须访问文件系统并列出相关文件夹中的所有 class 文件。如果在运行时源代码不可用,您应该将您的代码基于 R 代码。 INPUT FROM OS-DIR 是你的朋友。

如果您在这些相关文件夹中混合使用程序代码和基于 class 的 R 代码,您还必须验证 R 代码是来自程序还是来自 class:

RCODE-INFO:FILE-NAME = cFileName . </code><br> <code>IF RCODE-INFO:IS-CLASS THEN ...

OpenEdge 11.6 具有更多反射功能。但是没有列出给定基数 class 的所有子 classes 的功能。由于 ABL 没有针对 classes(如 C#)的固定库方案,因此 Progress 可能也很难实施。