delphi4arab منتديات دلفي للعرب
لماذا الـ property تكون على شكل const في الgenerics - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : لماذا الـ property تكون على شكل const في الgenerics (/showthread.php?tid=6746)



لماذا الـ property تكون على شكل const في الgenerics - codz - 30-01-2015

السلام عليكم
لماذا الكود التالي ينتج خطأ . او بالاحرى لماذا الـ property تكون على شكل const
كود :
program test; type gArray<T> = array of T; gData<T> = record private data : gArray<T>; public property mData: gArray<T> read data write data; end; var vec : gData<integer>; begin SetLength(vec.mData,100); //E2197 Constant object cannot be passed as var parameter end.



لماذا الـ property تكون على شكل const في الgenerics - SMP3 - 30-01-2015

إقتباس :لماذا الكود التالي ينتج خطأ
لأن SetLength تتطلب تمرير البرامتر الأول بالمرجع var !
إقتباس :لماذا الـ property تكون على شكل const
لأن دلفي لا يحجز أي ذاكرة لل property !
مثال :
PHP كود :
type
  TMyObj 
= class
  private
    
FStr: string;
  public
    
property MyStr: String read FStr write FStr;
  
end; 
عند الوصول الى الخاصية MyStr يقوم دلفي باستبدالها بالمتغير FStr :
PHP كود :
m := TMyObj.Create;
  
m.MyStr := 'hi'; // This line will be converted to m.FStr := 'hi'; 
دلفي يتحقق من طريقة التمرير قبل عملية الاستبدال .. لذلك وجب أن تكتب :
PHP كود :
SetLength(vec.Data, 100); 
بدل :
PHP كود :
SetLength(vec.mData, 100); // E2197 Constant object cannot be passed as var parameter 



لماذا الـ property تكون على شكل const في الgenerics - codz - 30-01-2015

شكرا smp3 على التوضيح