【问题标题】:How to create resolution clauses for overloaded interface methods?如何为重载的接口方法创建解析子句?
【发布时间】:2016-10-24 17:20:58
【问题描述】:

假设我有一个这样的界面:

IMaker = interface
  function Make(const Int: Integer): IInterface; overload;
  function Make(const Str: String): IInterface; overload;
end;

实现这个接口的常用方式如下:

TMaker = class(TInterfacedObject, IMaker)
public
  function Make(const Int: Integer): IInterface; overload;
  function Make(const Str: String): IInterface; overload;
end; 

但是如果我出于某些原因想使用method resolution clauses 怎么办?我的第一个猜测是这样的:

TMaker = class(TInterfacedObject, IMaker)
private
  function MakeByInt(const Int: Integer): IInterface; 
  function MakeByStr(const Str: String): IInterface; 
public
  function IMaker.Make(const Int: Integer) = MakeByInt;
  function IMaker.Make(const Str: String) = MakeByStr;
end; 

此代码无法编译,因为方法解析子句中不允许使用参数列表。

这种情况下的语法是什么样子的?是否可以对重载的方法使用方法解析子句?

【问题讨论】:

    标签: delphi interface


    【解决方案1】:

    你的问题说明了答案:

    方法解析子句中不允许使用参数列表

    参数列表对于解析重载是必需的,并且由于您不能在方法解析子句中指定参数列表,因此您不能对重载方法使用方法解析子句。没有语法支持您的要求。

    【讨论】:

    • 换句话说:在接口中重载方法是个坏主意。使用不同的名称,一切都很好。
    • @RudyVelthuis 通常在接口中使用重载并没有错。显然编译器支持它。您不能将此特定功能与重载一起使用。
    • 编译器支持,但一般不是一个好主意
    猜你喜欢
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2011-12-19
    • 1970-01-01
    相关资源
    最近更新 更多