我精通ABAP,对OO和轻型参考变量有一定的了解,但似乎无法更深入地了解参考变量和动态类型等。我做了一些阅读,但可以似乎无法获得我所需要的深刻理解。
有谁知道一些很棒的教程或网站,这些文章或网站可能会简洁明了?谢谢!
答案 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' ).
因为“#”表示“使用方括号内的变量类型”。
希望这对您有所帮助:)