引用变量和动态类型

时间:2018-11-30 20:28:11

标签: abap

我精通ABAP,对OO和轻型参考变量有一定的了解,但似乎无法更深入地了解参考变量和动态类型等。我做了一些阅读,但可以似乎无法获得我所需要的深刻理解。
有谁知道一些很棒的教程或网站,这些文章或网站可能会简洁明了?谢谢!

1 个答案:

答案 0 :(得分:-1)

首先,谷歌搜索该帖子标题,然后您就很黄金了。

第二: 我不确定我是否正确理解您,您是否想了解以下结构:

MSXML2::IXMLDOMNodePtr node = ...;

MSXML2::IMXWriterPtr writer;
writer.CreateInstance(__uuidof(MSXML2::MXXMLWriter60));
writer->indent = true;
writer->omitXMLDeclaration = true;

MSXML2::ISAXXMLReaderPtr reader;
reader.CreateInstance(__uuidof(MSXML2::SAXXMLReader60));

reader->putContentHandler(MSXML2::ISAXContentHandlerPtr(writer));
reader->parse(node->xml);

_bstr_t xml = writer->output;

对于动态类型,您是指ABAP 7.4 / 7.5(例如DATA(lv_var)= 123)?

如果是,我会尽力为您提供总体思路: 引用变量只是“准备成为”对象的变量。 如果您以这个为例:

DATA lo_ref_var TYPE REF TO zcl_my_class.

然后假设构造函数不需要任何变量,您将获得zcl_my_class Class的实例及其所有属性和方法。另外,如果您有一个抽象类zcl_abs_class作为超类,并且zcl_sub_class1和zcl_sub_class2是它的非抽象子类,则它比:

DATA lo_ref_var TYPE REF TO zcl_my_class.
CREATE OBJECT lo_ref_var.

您可以执行的操作(如上所示)将一个子类对象强制转换为超类引用变量,因为该子类的继承自zcl_abs_class。 有关更多信息,请进行一些挖掘。

动态类型: 这实际上非常简单,您需要记住的是,在动态创建变量时必须具有类型。例如:

DATA:
  lo_abs TYPE REF TO zcl_abs_class,
  lo_sub1 TYPE REF TO zcl_sub_class1,
  lo_sub2 TYPE REF TO zcl_sub_class2.

CREATE OBJECT: lo_sub1, lo_sub2.
lo_abs ?= lo_sub1.
lo_abs ?= lo_sub2.

带有lv_text的行将不起作用(无法编译),因为text-000没有精确的类型。 另一方面,第二行将采用类型I。 如果您想决定选择哪种类型,可以通过以下方式完成:

DATA(lv_text) = text-000.
DATA(lv_int) = 1.

您甚至可以通过编写以下代码来使用现有变量的类型:

DATA(lv_bukrs) = CONV bukrs( '1234' ).

因为“#”表示“使用方括号内的变量类型”。

希望这对您有所帮助:)