在Eiffel中更改特征签名的正确方法是什么?如果没有我所理解的选项,那么在父类中定义一个能够选择但仍然不知道参数数量和类型的特性的正确方法是什么?(类型可以通过多态性来解析……)
唯一可用的多态性是不是在a类中有一个参数来选择ANY类型?
可选择的类
class SELECTABLE
select
deferred
end
end -- classDB_SERVICE类
class DB_SERVICE
inherit
SELECTABLE
(...)
feature -- Status setting
select (a_db_connection: DB_CONNECTION)
local
l_qry: STRING
do
item := first_item_from_qry (l_qry)
end
end -- class发布于 2019-01-13 18:10:48
在SELECTABLE类中包含以下内容确实是一种解决方案:
select (a: ANY)
deferred
end另一种解决方案是使用TUPLE
select (a: TUPLE)
deferred
end这允许您在后代类中有多个参数:
select (a: TUPLE [db_connection: DB_CONNECTION])
do
a.db_connection.do_something
end它可以被调用:
a_db_server.select (a_db_connection)或者:
select (a: TUPLE [db_connection: DB_CONNECTION; db_parameters: DB_PARAMETERS])
do
a.db_connection.do_something (a.db_parameters)
end它可以被调用:
a_db_server.select (a_db_connection, a_dp_parameters)请注意,在这种情况下,在select的参数中是否需要显式元组表示法[...]是可选的。
当然,select是埃菲尔的一个关键词。您必须为您的功能使用另一个名称。
https://stackoverflow.com/questions/54162888
复制相似问题