![]() |
|
ما الفرق بين virtual and static method ؟ - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : ما الفرق بين virtual and static method ؟ (/showthread.php?tid=11000) |
ما الفرق بين virtual and static method ؟ - MasteranyOne - 11-08-2020 السلام عليكم ورحمة الله تعالى وبركاته نعلم أن classe méthodes تكون إما virtual او static لكن لم افهم الفرق بينهم ومتى أستعمل كل وحدة. قمت بإنشاء class على النحو التالي : كود : unit uClassA;
interface
type
TClassA = class(TObject)
public
class function Add(pA,pB: integer): integer;
end;
implementation
{ TClassA }
class function TClassA.Add(pA, pB: integer): integer;
begin
Result:= (pA + pB);
end;
end.يوجد 3 حالات لتعريف method : 1- بدون ايي كلمة مفتاحية (لا static لا virtual) كود : class function Add(pA,pB: integer): integer;كود : class function Add(pA,pB: integer): integer; static;كود : class function Add(pA,pB: integer): integer; virtual;الكل يشتغلون بدون مشاكل عبر هذا الكود (لا يوجد فرق في النتيجة) كود : ShowMessage(TClassA.Add(10,20).toString);اين هو الفرق إذا ؟ RE: ما الفرق بين virtual and static method ؟ - sofiane201 - 11-08-2020 كل class method هي static بشكل افتراضي. خاصية virtual توضع وراء أية method أو إجراء في كلاس ما إذا اردت من الكلاسات المنحدرة منها اعادة تعريف الاجراء, وليس شرط أن تكون class function أو class procedure. مثلا في كلاس عادية: PHP كود : typePHP كود : typeفي حالة كانت class function أو class procedure بغض النظر ان كانت virtual أو لا, يمكن استخدامها بدون انشاء object لذلك الكلاس, ففي مثالك لم تنشئ object أو instance للكلاس TClassA واستخدمت الاجراء مباشرة بعد ذكر اسم الكلاس. مثالي ليس مناسب, لكن اتمنى ان تصل الفكرة. RE: ما الفرق بين virtual and static method ؟ - MasteranyOne - 11-08-2020 الله ينورك أخي سفيان - نستعمل virtual لنقول أن هذه الـ method يمكن أن نعمل لها override في الكلاسات المشتقة(childe class). - override تعني تغيير السلوك (التعليمات) الموجودة في الـ method الخاصة بالكلاس الأصلية (parent class). إذا كان هذا صحيح, يمكن فعل نفس الشيء بدون إستخدام virtual و override وهذا كود توضيحي : كود : unit uClassA;
interface
uses Vcl.Dialogs;
type
TClassA = class(TObject)
public
procedure GetInfo;
end;
TClassB = class(TClassA)
public
procedure GetInfo;
end;
implementation
{ TClassA }
procedure TClassA.GetInfo;
begin
ShowMessage('ClassA.GetInfo');
end;
{ TClassB }
procedure TClassB.GetInfo;
begin
ShowMessage('ClassB.GetInfo');
end;
end.ماهو الفرق إذا؟ RE: ما الفرق بين virtual and static method ؟ - sofiane201 - 12-08-2020 هنا أنت دخلت في polymorphism وما هي فائدته. هاك هذا المثال, شغله أولا ثم انظر الناتج, بعدها احذف virtual من الكلاس الام وoverride من الكلاسات الاخرى وشغل ثم لاحظ الفرق: PHP كود : usesبدون عمل overriding للاجراءات الناتج يكون هكذا: إقتباس : وبعمل overriding يكون هكذا: إقتباس : RE: ما الفرق بين virtual and static method ؟ - MasteranyOne - 14-08-2020 الله يفتح عليك ويبارك فيك بدأت تصلنا اشعة الشمس (بدينا نفهموا), الحمدلله يعني ممكن نديها قاعدة : اني ديما نستعمل virtual and override تحسبا لإستعمال تلك الطريقة مستقبلا , افضل من اني لا استعملهم ؟ ربي ينورك ويفرج عليك أخي الكريم RE: ما الفرق بين virtual and static method ؟ - ghostdz - 18-08-2020 لما تكون method static يتم تحديد عنوانها من طرف compiler أما method virtual فيتم تحديد عنوانها أثناء execution |