2012-06-09 4 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 기능을 고려하십시오.

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

아직 그것은 overload로 표시됩니다 : StrUtils.IfThen은 정확히 한 번만 존재한다. 이는 Math.IfThen으로 오버로드되어 하나의 유닛이 MathStrUtils을 모두 사용하는 경우 무 규정 인 IfThen은 인수에 따라 그리고 uses 목록의 단위 순서에 관계없이 적절한 기능으로 해결됩니다.

+3

멋진 - 나는 그런 문제를 해결하는 데 사용할 수 있다는 것을 결코 알지 못했습니다! –

관련 문제