11
時には、オーバーロードされていないメソッドの後に "オーバーロード"キーワードがあります。`overload`キーワードは何か違いはありますか?
コードの可読性と保守性の他に、これには私が気づくべき他の影響がありますか?
時には、オーバーロードされていないメソッドの後に "オーバーロード"キーワードがあります。`overload`キーワードは何か違いはありますか?
コードの可読性と保守性の他に、これには私が気づくべき他の影響がありますか?
大きな違いは、メソッドへの引数が正しくない場合、オーバーロードされていないメソッドの方がエラーメッセージが大幅に優れていることです。
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
でオーバーロードされているためです。ユニットがMath
とStrUtils
の両方を使用する場合、IfThen
は、引数に応じて、uses
リスト内のユニットの順序に関係なく、適切な関数に解決されます。
ニース - このような問題を解決するために使用することはできませんでした。 –