delphi4arab منتديات دلفي للعرب

نسخة كاملة : كيف يتم التنقل في شجرة الوراثة بإستخدام inherited ؟
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله تعالى وبركاته

نص المشكلة : 
قمت بإنشاء 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;

فكيف السبيل لفعل هذا؟؟
وعليكم السلام ورحمة الله.
أخ MasteranyOne, من الأفضل مراجعة كتاب أو مرجع جيد لدروس OOP, خاصة جانب Polymorphism الذي يبدو أن لديك اشكالا فيه.
لو تقرأ لن تجد استخداما للوراثة بهذا الشكل, يمكن ان يكون هناك حل لكنه غير مرغوب, ثم ان هناك مبادئ في مجال oop يجب الالتزام بها حتى لا يكون لديك تشويش فيه.

من الأفضل أيضا لو تعمل بكلاسات يحتمل استخدامها وليس TClassA TClassB وتبين الغرض من وراء مثالك حتى لا يكون عشوائيا.
جرب الكود التالي 
كود :
constructor TClassC.Create; begin   TClassA(Self).GetInfo; end;
هذه تعمل, لكن حتى مع أي كلاس خارجية مادام لديهم اجراء بنفس الاسم, وليست مرتبط بالوراثة, مثلا هذه الكلاس العشوائية:
PHP كود :
  TRandomClass = class
  public
    procedure GetInfo;
  end; 

وفي constructor الخاص ب TClassC:

PHP كود :
TRandomClass(self).GetInfo; 

يشتغل مع أنهم غير مرتبطين مع بعضهم.
بارك الله فيكم أخواني سفيان و ghostdz

بالنسبة لـ OOP بماذا تنصحوني لكي اتمكن منها.

بالنسبة للكود :
كود :
  TClassA(Self).GetInfo;

ما تفسير هذه الظاهرة ؟ مع ان المنهاج GetInfo ليس منهاج خاص بالـ class.