根据指定项目文件夹中的class个文件动态创建对象
Create objects dynamically according to class files in specified project folder
我们有一个文件夹,其中有许多 class 继承自同一基础 class。他们的名字格式如下:
- firsttypesubclass_1.cls
- firsttypesubclass_2.cls
- firsttypesubclass_3.cls
- secondtypesubclass_1.cls
- secondtypesubclass_2.cls
该程序应扫描此 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 可能也很难实施。
我们有一个文件夹,其中有许多 class 继承自同一基础 class。他们的名字格式如下:
- firsttypesubclass_1.cls
- firsttypesubclass_2.cls
- firsttypesubclass_3.cls
- secondtypesubclass_1.cls
- secondtypesubclass_2.cls
该程序应扫描此 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 可能也很难实施。