2
だが、私はこのようなインタフェースを持っているとしましょう:オーバーロードされたインターフェイスメソッドの解決句を作成するにはどうすればよいですか?
IMaker = interface
function Make(const Int: Integer): IInterface; overload;
function Make(const Str: String): IInterface; overload;
end;
このインタフェースを実装するための一般的な方法は、次のようになります。私はいくつかの理由でmethod resolution clausesを使用したい場合は
TMaker = class(TInterfacedObject, IMaker)
public
function Make(const Int: Integer): IInterface; overload;
function Make(const Str: String): IInterface; overload;
end;
しかし、何?私の最初の推測では、次のようになります。
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;
パラメータリストはメソッド解決節で許可されていないので、このコードはコンパイルされません。
この場合、構文はどのように見えますか?オーバーロードされたメソッドにメソッド解決節を使用することも可能ですか?
言い換えれば、**インターフェイスのメソッドをオーバーロードするのは悪い考えです**。異なる名前を使用して、すべてがうまくいきます。 –
@RudyVelthuis一般的にインターフェイスで過負荷を使うことには何も問題はありません。明らかに、コンパイラはそれをサポートしています。この特定の機能*を過負荷で使用することはできません。 –
コンパイラはそれをサポートしていますが、一般的に**良いアイデアはありません**。 –