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

时间:2016-02-22 09:58:52

标签: progress-4gl

我们有一个包含许多类的文件夹,这些类继承自同一个基类。他们的名字格式如下:

  • firsttypesubclass_1.cls
  • firsttypesubclass_2.cls
  • firsttypesubclass_3.cls
  • secondtypesubclass_1.cls
  • secondtypesubclass_2.cls

程序应扫描此类文件夹并使用类名前缀和计数创建临时表(f.ex" firsttypesubclass"和count = 3):

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

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

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

有没有方便的方法列出文件夹中的类名?或者是否可能获得从基类继承的所有类?我正在考虑使用文件系统来检查文件。

1 个答案:

答案 0 :(得分:0)

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

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

RCODE-INFO:FILE-NAME = cFileName .
IF RCODE-INFO:IS-CLASS THEN ...

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