sap ABAP "?"和"?=" 的涵义(Casting)

来源:互联网 发布:云计算对个人的影响 编辑:程序博客网 时间:2024/05/21 18:00

首先个人理解这个“?”和指针Field Symbol里的Casting有着相同的意思。

所以,先来看这个Casting是什么。
Casting在英语词典有“铸造;铸件;投掷;角色分配;扔掉”的意思,那么在ABAP里可以这样理解Casting——“舍弃之前的自己,改造自己以适应新环境”。

而Catsing分为隐式型变化和显示型变化两种,下面看看Casting在Field Symbol中起的作用:

1.隐式变化:

ASSSIGN <var> TO <fs> CASTING.

例子:

TYPES: BEGIN OF t_line,         col1 TYPE char5,         col2 TYPE char10,         col3 TYPE char15,        END OF t_line.DATA: gv_addr(30) TYPE c VALUE 'CHINA BEIJING TWIN BUILDING'.FIELD-SYMBOLS: <fs> TYPE t_line.ASSIGN gv_addr TO <fs> CASTING.WRITE: <fs>-col1, <fs>-col2, <fs>-col3.

运行结果:

CHINA  BEIJING T WIN BUILDING

其中
<fs>-col1=CHINA, <fs>-col2= BEIJING T,<fs>-col3=WIN BUILDING

在这个例子中,若不使用Casting,则会产生数据类型不一致的错误,因为是结构类型,gv_addr是字符类型。

2.显式变化
若将上述例子中的FIELD SYMBOLS 定义为Generic Type(不指定类型)即
将:

FIELD-SYMBOLS: <fs> TYPE t_line.

改为:

FIELD-SYMBOLS: <fs> TYPE ANY.

ASSIGN gv_addr TO <fs> CASTING.

要改为

ASSIGN gv_addr TO <fs> CASTING TYPE t_line.

且输出语句不能再用

WRITE: <fs>-col1, <fs>-col2, <fs>-col3.

也得改成:

WRITE: <fs>.

而这个”?”即Casting符号,更多是用于面向对象的,意思是参照其它类的对象创建新对象。

**这个其他类指的是父类和从父类继承的子类,子类可重新定义,或追加父类的属性及方法。
从父类衍生的对象和子类衍生的对象类型可能不同,但此时可用casting符号“?”来使程序正常执行。**

例子:

*---------------------------------------------------------------------**       CLASS vehicle DEFINITION*---------------------------------------------------------------------**       ........                                                      **---------------------------------------------------------------------*CLASS vehicle DEFINITION INHERITING FROM object.  PUBLIC SECTION.    METHODS: create,             drive.  PROTECTED SECTION.    DATA speed TYPE i VALUE '100'.ENDCLASS.*---------------------------------------------------------------------**       CLASS plane DEFINITION*---------------------------------------------------------------------**       ........                                                      **---------------------------------------------------------------------*CLASS plane DEFINITION INHERITING FROM vehicle.  PUBLIC SECTION.    METHODS: fly.ENDCLASS.*---------------------------------------------------------------------**       CLASS vehicle IMPLEMENTATION*---------------------------------------------------------------------**       ........                                                      **---------------------------------------------------------------------*CLASS vehicle IMPLEMENTATION.  METHOD create.  ENDMETHOD.  METHOD drive.    speed = speed + 100.    WRITE: 'Driving is possible,','Current Speed:',speed.  ENDMETHOD.ENDCLASS.*---------------------------------------------------------------------**       CLASS plane IMPLEMENTATION*---------------------------------------------------------------------**       ........                                                      **---------------------------------------------------------------------*CLASS plane IMPLEMENTATION.  METHOD fly.    speed = speed + 1000.  ENDMETHOD.ENDCLASS.DATA : car TYPE REF TO vehicle,       air TYPE REF TO vehicle.START-OF-SELECTION.  CREATE OBJECT : car.  air ?= car.  CALL METHOD: air->drive.

运行结果:

Driving is possible, Current Speed:        200

**调试过很多次,感觉?=和=的用法在面向对象中差不多,不过?=是专门用于引用类型的,有兴趣的可以自行调试,
往后再有此符号的不同用法我会再更新。**

0 0
原创粉丝点击