2012-06-09 13 views
11

कभी-कभी मेरे पास एक अधिभार के बाद "ओवरलोड" कीवर्ड होता है जो अधिभारित नहीं होता है।क्या 'ओवरलोड` कीवर्ड कोई फर्क पड़ता है?

कोड की पठनीयता और रखरखाव के अलावा, क्या इसका कोई अन्य प्रभाव है जिसके बारे में मुझे अवगत होना चाहिए?

उत्तर

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 के साथ अधिभारित है, और यदि एक इकाई दोनों Math और StrUtils दोनों का उपयोग करती है, तो एक अयोग्य IfThen तर्कों के आधार पर उचित फ़ंक्शन को हल करेगा, और uses सूची में इकाइयों के क्रम के बावजूद।

+3

नाइस - मुझे कभी नहीं पता था कि ऐसी समस्याओं को हल करने के लिए इसका उपयोग किया जा सकता है! –

संबंधित मुद्दे