ABAP数据类型和数据对象(二)-有效性和可见性,绝对数据类型
作者:互联网
有效性和可见性
在ABAP源码中声明性的语句上下文决定了声明部分的可见性和有效性,在ABAP程序中,有三个上下文,数据类型和数据对象是在上下文中被声明的:
- 过程局部
- 当过程被执行的时候,过程的局部数据是有效的,当过程被创建的时候它被创建,当过程退出的时候被删除。就他们局部数据和形参来说,过程也能访问到主程序的全局数据,方法也能访问到他们类的组件。
- 作为类的组件
- 类的静态属性伴随着ABAP程序内部会话而存在,类的实例属性关联到对象的生命周期,类也能访问到主程序的全局数据。
- 主程序全局
- 全局程序数据的存在伴随着ABAP程序的内部会话。当程序在内部会话中被加载的时候数据被创建,当程序移除的时候数据被从内部会话删除。ABAP程序通常只能访问它自己的全局数据。
- 所有的上下文可以访问到独立于程序的ABAP数据字典中的类型定义,对于本地声明,隐藏了同名的全部声明。
- 通过本地类型隐藏的全局类型可以通过指定绝对的类型名字取消,所以动态指定的数据类型,类,或者接口是可能的。
- 就独立的上下文可见性而言,声明在源文本中的位置也起着重要的作用,只有前面声明的对于后面是可见的,无关上下文。为了允许程序中的顺序匹配上下文可见性,程序所有的全局声明应该在源码开始的时候被指定,在第一个处理块之前,所有本地的声明应该被直接指定。
- ABAP程序所有的在声明部分声明的数据对于程序来说是全局的,另外所有事件块和对话框模块中声明的数据也是程序的全局的(除了事件块AT SELECTION-SCREEN)。而且在不连续的处理块之间声明的数据对于程序来说也是全局的。
- \TYPE=name
- \CLASS=name
- \INTERFACE=name
- \PROGRAM=name
- \CLASS-POOL=name
- \FUNCTION-POOL=name
- \TYPE-POOL=name
- \METHOD=name
- \FORM=name
- \FUNCTION=name
- 为了给本地数据类型,类,接口创建绝对类型命名,使用它们上下文作为前缀,进行组件命名。
- 使用一个绝对类型命名的规范使得从本地类型隐藏全局类型变成可能,如果有访问的必要加载不同的程序到当前内部会话也是可能的。
- 运行时类型服务(RTTS)的类类型,比如CL_ABAP_TYPEDESCR,包含了返回绝数据类型或者数据对象的类型名字。
CLASS c1 DEFINITION. PUBLIC SECTION. METHODS: m1, m2, m3 IMPORTING p TYPE any. ENDCLASS. CLASS c1 IMPLEMENTATION. METHOD m1. DATA struc TYPE spfli. m3( struc ). ENDMETHOD. METHOD m2. TYPES spfli TYPE spfli. DATA struc TYPE spfli. m3( struc ). ENDMETHOD. METHOD m3. DATA type_descr TYPE REF TO cl_abap_typedescr. type_descr = cl_abap_typedescr=>describe_by_data( p ). WRITE / type_descr->absolute_name. ENDMETHOD. ENDCLASS. START-OF-SELECTION. data c1_ref type REF TO c1. CREATE OBJECT c1_ref . c1_ref->m1( ). c1_ref->m2( ).
运行结果:
\TYPE=SPFLI \PROGRAM=ZWSPTEST10\CLASS=C1\METHOD=M2\TYPE=SPFLI标签:name,程序,数据类型,ABAP,类型,全局,TYPE,有效性 来源: https://www.cnblogs.com/mach-arch/p/16107345.html