2012-06-09 6 views

答えて

18

大きな違いは、メソッドへの引数が正しくない場合、オーバーロードされていないメソッドの方がエラーメッセージが大幅に優れていることです。

program Test; 

procedure F(X: Integer); 
begin 
end; 

procedure G(X: Integer); overload; 
begin 
end; 

var 
    P: Pointer = nil; 

begin 
    F(P); // E2010 Incompatible types: 'Integer' and 'Pointer' 
    G(P); // E2250 There is no overloaded version of 'G' that can be called with these arguments 
end. 

さらに、オーバーロードされたメソッドは、あなたが知らない関数でオーバーロードされることがあります。標準のIfThen機能を考えてみましょう。 StrUtils.IfThenは一度だけ存在します。

function IfThen(AValue: Boolean; const ATrue: string; 
    AFalse: string = ''): string; overload; inline; 

まだそれはoverloadとしてマークされています。これは、Math.IfThenでオーバーロードされているためです。ユニットがMathStrUtilsの両方を使用する場合、IfThenは、引数に応じて、usesリスト内のユニットの順序に関係なく、適切な関数に解決されます。

+3

ニース - このような問題を解決するために使用することはできませんでした。 –

関連する問題