السلام عليكم و رحمة الله و بركاته .
ماهي هده التوجيهات :
1- Override : (اظن انها للدلالة على أن الإجراء سيكون موروث ؟؟؟ بـ Inherited)
2- ي Abstract يعني أن الدالة سيعاد تعريفها من جديد في كل صنف يشتق
من الصنف الدي تنتمي إليه ؟؟
3- virtual / dynamic : للتحميل المتأخر + خاصية المرجعيه لكن ما الفرق ؟؟ أهو الترتيب في الذاكرة ؟؟
بارك الله فيكم :monster2:.
إقتباس :- Override : (اظن انها للدلالة على أن الإجراء سيكون موروث ؟؟؟ بـ Inherited)
الدالة التى تكون
override يجب ان تكون تحت صنف مورث من صنف اخر يحتوى على على دالة لها نفس اسم الدالة التى تكون
override
بحيث تكون تلك الدالة
(dynamic او virtual)
بحيث يمكن استدعاء الدالة
(dynamic او virtual) من الدالة
override عن طريق الكلمة
inherited
بحيث هذه الكلمة تقوم باستدعاء الدالة
(dynamic او virtual) التى لها نفس اسم الدالة
override
و ادا اردنا استدعاء دالة اخرى ليست لها نفس اسم الدالة
override نقوم بكتابة اسمها عادى او نكتب
inherited ثم اسم الدالة .
مثلا
PHP كود :
type
TFigure = class
procedure Dessiner1; virtual;
procedure Dessiner2; virtual;
end;
TRectangle = class(TFigure)
procedure Dessiner2; override;
end;
PHP كود :
procedure TRectangle.Dessiner2;
begin
inherited;
ShowMessage('TRectangle[override]');
end;
PHP كود :
procedure TForm1.FormCreate(Sender: TObject);
var
Figure: TFigure; {or Figure: TRectangle}
begin
Figure := TRectangle.Create;
Figure.Dessiner2;
end;
سيتم استدعاء الدالة
كود :
TFigure.Dessiner[color=Red]2[/color];
ثم
كود :
TRectangle.Dessiner2;
=================
بالنسبة ل Abstract ... الله اعلم ... لم افهم اهميتها .
=================
بالنسبة virtual و dynamic الله اعلم لا يوجد فرق بينها سوى virtual مخصصة للسرعة و dynamic مخصصة لحجم الكود . و فى كثير من الاحيان من المستحسن استعمال virtual
هدا ما جاء به هالب
كود :
Remarque
N'utilisez les méthodes dynamiques que s'il existe un avantage clair et observable. Utilisez habituellement les méthodes virtuelles.
و الله اعلم . :unsure:
بارك الله فيك أخي hanipino لو عندك وقت ممكن مزيد من الأمثلة ؟؟؟
جازاك الله خيرا ,,
اليوم فقط إطلعت على ردك الاكثر من رائع
شكرا على التوضيح الجميل و المهم ... بالتوفيق ,,
إقتباس :منهج Virtual يعني للـ Compiler التركيز على السرعة أكثر (Optimized for Speed)، واستخدام Dynamic يعني التركيز على الحجم بشكل أكبر (Optimized for Size)،
Virtual Methods هي مصممة للسرعة على حساب الحجم بينما Dynamic Methods تأخذ حجم أقل في الكود التنفيذي لكنها ابطاً في التنفيذ.
Virtual Methods يتم بناء جدول لها في الذاكرة يسمى VMT والذي يتضمن فهرس يحتوي اسماء الطرق Methods الموجودة في هذا الصنف، بينما Dynamic Methods يكون لها جدول يسمى DMT ولا يكون لديها فهرس لذا يتم البحث بطريقة خطية ضمن الطرق الموجودة في الصنف وإن لم يجد يبحث في الصنف الأب وهكذا لذا فهي لا تاخذ مساحة أكثر لعدم وجود الفهرس لكنها ابطاً بسبب طريقة البحث.
لذا يفضل في معظم الحالات ان يتم إستخدام ال Virtual للسرعة