डेल्फी में, वस्तुएं विशेष पॉइंटर्स हैं जो ढेर स्मृति पर डेटा संरचना का संदर्भ देती हैं। जब आप किसी ऑब्जेक्ट को किसी फ़ंक्शन पर पास करते हैं, तो आप वास्तव में पॉइंटर पास कर रहे हैं, न कि पूरे ऑब्जेक्ट डेटा की एक प्रति। इस मामले में, जब आप उस संदर्भ के माध्यम से किसी फ़ील्ड या प्रॉपर्टी को संशोधित करते हैं, तो यह मूल ऑब्जेक्ट डेटा को प्रभावित करेगा।
program ObjParamTest;
type
TMyClass = class
private
FMyField : Integer;
public
property MyField : Integer read FMyField write FMyField;
end;
function ModifyObject(AnObj: TMyClass);
begin
AnObj.MyField := AnObj.MyField + 1;
end;
var
MyObj : TMyClass;
begin
MyObj := TMyClass.Create;
try
AnObj.MyField := 2;
Writeln(AnObj.MyField); // ==> Prints 2
ModifyObject(MyObj);
Writeln(AnObj.MyField); // ==> Prints 3
finally
MyObj.Free;
end;
end.
भी ध्यान रखने, पैरामीटर संशोधक (जैसे वार, कॉन्स्ट, आउट) एक ही रास्ता वस्तु संदर्भ कार्य करने के लिए पारित कर दिया है बदलने के लिए, और मूल पर कोई प्रभाव नहीं ले: यहाँ एक सरल उदाहरण इस व्यवहार का प्रदर्शन किया जाता है डेटा संरचना।
हो सकता है कि यह लेख आपके लिए डेल्फी में कार्यों के लिए पैरामीटर प्रदान करने के विभिन्न तरीकों के बारे में चीजों को साफ करता है और अधिक:
Different function parameter modifiers in Delphi (संग्रहीत संस्करण)
अरे तुम मुझे यह करने के लिए हरा ... :) +1 –
हाँ, मूल वस्तु ढेर पर है। लेकिन जब तक आप संदर्भ से गुजरते हैं, तब तक आपको संदर्भ की ** प्रति ** प्राप्त होती है। उस स्थिति में आपको किसी ऑब्जेक्ट के संदर्भ का संदर्भ मिलता है। –
[केवल एक ही हो सकता है] (http://www.imdb.com/title/tt0091203/) –