![]() |
|
كيف يتم التنقل في شجرة الوراثة بإستخدام inherited ؟ - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : كيف يتم التنقل في شجرة الوراثة بإستخدام inherited ؟ (/showthread.php?tid=11003) |
كيف يتم التنقل في شجرة الوراثة بإستخدام inherited ؟ - MasteranyOne - 12-08-2020 السلام عليكم ورحمة الله تعالى وبركاته نص المشكلة : قمت بإنشاء 3 class كما يلي : 1- class A 2- class B ترث من class A 3- class C ترث من class B وكل وحدة تحتوي على المنهاج GetInfo خاصة بها, كما هو موضح في الكود التالي : كود : unit uClass;
interface
uses Vcl.dialogs;
type
TClassA = class(TObject)
public
procedure GetInfo;
end;
TClassB = class(TClassA)
public
procedure GetInfo;
end;
TClassC = class(TClassB)
public
constructor Create;
procedure GetInfo;
end;
implementation
{ TClassC }
constructor TClassC.Create;
begin
inherited GetInfo;
end;
procedure TClassC.GetInfo;
begin
ShowMessage('GetInfo for Class C');
end;
{ TClassB }
procedure TClassB.GetInfo;
begin
ShowMessage('GetInfo for Class B');
end;
{ TClassA }
procedure TClassA.GetInfo;
begin
ShowMessage('GetInfo for Class A');
end;
end.الإشكالية : في المنهاج create الخاص بال class C اردت إستدعاء المنهاج GetInfo الخاص بال class A إستعملت الكود التالي, لكن ينفذ GetInfo الخاص بـ class B كود : constructor TClassC.Create;كود : beginكود : inherited GetInfo;كود : end;قمت بالتلاعب وستعملت هذا الكود لكن يظهر خطأ كود : constructor TClassC.Create;
begin
inherited inherited GetInfo;
end;فكيف السبيل لفعل هذا؟؟ RE: كيف يتم التنقل في شجرة الوراثة بإستخدام inherited ؟ - sofiane201 - 12-08-2020 وعليكم السلام ورحمة الله. أخ MasteranyOne, من الأفضل مراجعة كتاب أو مرجع جيد لدروس OOP, خاصة جانب Polymorphism الذي يبدو أن لديك اشكالا فيه. لو تقرأ لن تجد استخداما للوراثة بهذا الشكل, يمكن ان يكون هناك حل لكنه غير مرغوب, ثم ان هناك مبادئ في مجال oop يجب الالتزام بها حتى لا يكون لديك تشويش فيه. من الأفضل أيضا لو تعمل بكلاسات يحتمل استخدامها وليس TClassA TClassB وتبين الغرض من وراء مثالك حتى لا يكون عشوائيا. RE: كيف يتم التنقل في شجرة الوراثة بإستخدام inherited ؟ - ghostdz - 13-08-2020 جرب الكود التالي كود : constructor TClassC.Create;
begin
TClassA(Self).GetInfo;
end;RE: كيف يتم التنقل في شجرة الوراثة بإستخدام inherited ؟ - sofiane201 - 13-08-2020 هذه تعمل, لكن حتى مع أي كلاس خارجية مادام لديهم اجراء بنفس الاسم, وليست مرتبط بالوراثة, مثلا هذه الكلاس العشوائية: PHP كود : TRandomClass = classوفي constructor الخاص ب TClassC: PHP كود : TRandomClass(self).GetInfo; يشتغل مع أنهم غير مرتبطين مع بعضهم. RE: كيف يتم التنقل في شجرة الوراثة بإستخدام inherited ؟ - MasteranyOne - 14-08-2020 بارك الله فيكم أخواني سفيان و ghostdz بالنسبة لـ OOP بماذا تنصحوني لكي اتمكن منها. بالنسبة للكود : كود : TClassA(Self).GetInfo;ما تفسير هذه الظاهرة ؟ مع ان المنهاج GetInfo ليس منهاج خاص بالـ class. |