【转载】ABAP面向对象(Object Orientation)编程3-类方法传递参数

1, 参数种类

同form一样,OO中的method也可以传递参数,有importing,exporting,changing,returning。

2017-02-28_20-42-45

注意:RETURNING 用来替换EXPORTINGCHANGING不能同时使用。定义了一个形式参数 r 来接收返回值,并且只能是值传递。

参数调用method的语法:

 

1

2

3

4

5

6

[CALL METHOD]  meth|me->meth|oref->meth|super->meth|class=>meth[(]

[EXPORTING  p1 = a1 p2 = a2 ...]

{ {[IMPORTING  p1=a1 p2=a2 ...][CHANGING p1 = a1 p2 = a2 ...]}

|[RECEIVING  r  = a  ] }RECEIVING不能与EXPORTING、CHANGING同时使用

[EXCEPTIONS [exc1 = n1 exc2 = n2 ...]

[OTHERS = n_others] ] [)].

RECEIVING:用来接收METHODS /CLASS-METHODS 中RETURNING选项返回的值

如果EXPORTING、IMPORTING、CHANGING、RECEIVING、EXCEPTIONS、OTHERS同时出现时,应该按此顺序来编写

使用此种方式调用(使用 EXPORTINGIMPORTING等这些选项)时,如果原方法声明时带了返回值RETURNING,只能使用RECEIVING来接受,而不能使用等号来接收返回值,下面用法是错误的:

 

1

num2 = o1->m1( EXPORTING p1 = num1 ).

 

2, 方法调用方式

method调用分为以下几种形式:

  • meth( )

此种方式仅适用于没有输入参数(IMPORTING)、输入\输出参数(CHANGING)、或者有但都是可选的、或         者不是可选时但有默认值也可

  • meth( a )

此种方式仅适用于只有一个必选输入参数(IMPORTING)(如果还有其他输入参数,则其他都为可选,或者            不是可选时但有默认值也可),或者是有多个可选输入参数(IMPORTING)(此时没有必选输入参数情况                  下)的 情况下但方法声明时通过使用PREFERRED PARAMETER选项指定了其中某个可选参数为首选参数            (首选参数 即在使用meth( a )方式传递一个参数进行调用时,通过实参a传递给设置为首选的参数)

  • meth( p1 = a1 p2 = a2 ... )

此种方式适用于有多个必选的输入参数(IMPORTING)方法的调用(其它如CHANGING、EXPORTING没有,或者有但可选),如果输入参数(IMPORTING)为可选,则也可以不必传

Return唯一返回值

 

1

2

3

4

METHODS meth

[IMPORTING parameters [PREFERRED PARAMETER p]]

    RETURNINGVALUE(r) typing

[{RAISING|EXCEPTIONS} exc1 exc2 ...].

RETURNING 用来替换EXPORTINGCHANGING不能同时使用。定义了一个形式参数 r 来接收返回值,并且只能是值传递

具有唯一返回值的函数方法可以直接用在以下语句中:逻辑表达式(IF、ELSEIF、WHILE、CHECK、WAIT)、CASE、LOOP、算术表达式、赋值语句

函数方法可以采用上面简单调用方式来调用:meth( )、meth( a )、meth( p1 = a1 P2 = a2 ... )

 

1

2

3

ref->m( RECEIVING  r = i ).

CALL METHOD ref->m( RECEIVING r = i ).

CALL METHOD ref->m RECEIVING r = i.

方法还可以进行动态调用, 即通过变量对方法名进行指定, 例如下列语句:

 

1

2

meth = accelerate.

  CALL METHOD ob_veh->(meth).

实参的动态传递:

 

1

2

3

CALL METHOD [oref->|class=>]meth

    PARAMETER-TABLE ptab

    EXCEPTION-TABLE etab.

 

其中实参必须在程序中放置在两个特定类型的内表中, 传递给方法, 其中参数表ptab可以参照类型组ABAP_PARMBID(行类型)和ABAP_PARMBIND_TAB(表类型)生成; 异常表etab 可以参照ABAP_EXCBIND(行类型)和ABAP_EXCBIND_TAB(表类型)生成.

3, 简单例子代码

简单的例子代码如下:

ABAP

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

REPORT ztest_method_para.

*&---------------------------------------------------------------------*

*&       Class vehicle

*&---------------------------------------------------------------------*

*        Text

*----------------------------------------------------------------------*

CLASS vehicle DEFINITION.

  PUBLIC SECTION.

    METHODS:exp_speed IMPORTING cname  TYPE string

                      EXPORTING ispeed TYPE i,

      accelerate IMPORTING rate TYPE i,

      add CHANGING addone TYPE i.

 

  PRIVATE SECTION.

    DATA speed TYPE i VALUE 0.

ENDCLASS.               "vehicle

*&---------------------------------------------------------------------*

*&       Class (Implementation)  vehicle

*&---------------------------------------------------------------------*

*        Text

*----------------------------------------------------------------------*

CLASS vehicle IMPLEMENTATION.

  METHOD accelerate.

    speed = speed + rate.

  ENDMETHOD.                    "accelerate

  METHOD exp_speed.

    ispeed = speed.

    WRITE:/ cname.

  ENDMETHOD.                    "show_speed

  METHOD add.

    addone = speed + 1 .

  ENDMETHOD.                    "add

ENDCLASS.               "vehicle

 

DATA o_vehicle TYPE REF TO vehicle.

DATA:g_speed TYPE i.

DATA fname TYPE string VALUE 'Speed = '.

 

START-OF-SELECTION.

  CREATE OBJECT o_vehicle.

  CALL METHOD o_vehicle->accelerate

    EXPORTING

      rate = 3.

 

  CALL METHOD o_vehicle->add

    CHANGING

      addone = g_speed.

  WRITE:g_speed.

 

  CALL METHOD o_vehicle->exp_speed

    EXPORTING

      cname  = fname

    IMPORTING

      ispeed = g_speed.

  WRITE:g_speed.

2017-02-28_20-36-56

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值