2016-10-24 9 views
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; 

パラメータリストはメソッド解決節で許可されていないので、このコードはコンパイルされません。

この場合、構文はどのように見えますか?オーバーロードされたメソッドにメソッド解決節を使用することも可能ですか?

答えて

7

あなたの質問は答えを次のように述べています

パラメータリストはメソッド解決節で許可されていない

パラメータリストは、オーバーロードの解決のために必要である、とあなたは、パラメータのリストを指定することはできませんので、メソッドの解決句では、オーバーロードされたメソッドに対してメソッド解決句を使用できません。あなたが求めているものをサポートする構文はありません。

+0

言い換えれば、**インターフェイスのメソッドをオーバーロードするのは悪い考えです**。異なる名前を使用して、すべてがうまくいきます。 –

+0

@RudyVelthuis一般的にインターフェイスで過負荷を使うことには何も問題はありません。明らかに、コンパイラはそれをサポートしています。この特定の機能*を過負荷で使用することはできません。 –

+0

コンパイラはそれをサポートしていますが、一般的に**良いアイデアはありません**。 –

関連する問題