如何从静态方法调用类构造函数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从静态方法调用类构造函数?相关的知识,希望对你有一定的参考价值。
在我的代码中,我想从静态方法CLASS_CONSTRUCTOR
调用ADD_BOOK
方法。
但是我收到此语法错误:
不可能直接调用特殊方法“CLASS_CONSTRUCTOR”。
这是代码:
CLASS lcl_books DEFINITION.
PUBLIC SECTION.
CLASS-METHODS class_constructor.
CLASS-METHODS add_book.
...
ENDCLASS.
CLASS lcl_books IMPLEMENTATION.
METHOD class_constructor.
SELECT * FROM zgib_bmabuecher INTO TABLE gt_return.
ENDMETHOD.
METHOD add_book.
DATA lf_check TYPE n VALUE 0.
LOOP AT gt_return INTO mf_books.
IF if_book-isbn = mf_books-isbn.
lf_check = 1.
ENDIF.
ENDLOOP.
IF lf_check = 0.
INSERT zgib_bmabuecher FROM if_book.
ENDIF.
lcl_books=>class_constructor( ).
ENDMETHOD.
ENDCLASS.
答案
您拥有错误消息中的所有信息。你不能(德语:darfst nicht)显式调用类构造函数。无论何时第一次使用该类,它总是被自动调用一次。
如果要重用类构造函数的编码,则将其放在另一个类方法中,例如像这样。
CLASS lcl_books DEFINITION.
"...
PRIVATE SECTION.
CLASS-METHODS:
select_books.
"...
ENDCLASS.
CLASS lcl_books IMPLEMENTATION.
METHOD class_constructor.
select_books( ).
ENDMETHOD.
METHOD select_books.
SELECT * FROM zgib_bmabuecher INTO TABLE gt_return.
ENDMETHOD.
然后将你的add_book
方法更改为
METHOD add_book.
DATA lf_check TYPE n VALUE 0.
LOOP AT gt_return INTO mf_books.
IF if_book-isbn = mf_books-isbn.
lf_check = 1.
ENDIF.
ENDLOOP.
IF lf_check = 0.
INSERT zgib_bmabuecher FROM if_book.
ENDIF.
select_books( ).
ENDMETHOD.
ENDCLASS.
以上是关于如何从静态方法调用类构造函数?的主要内容,如果未能解决你的问题,请参考以下文章
编写高质量代码改善C#程序的157个建议——建议106:为静态类添加静态构造函数