ما سبب ظهور الرسالة Override method should match ancestor عند التعامل مع Thread
#1
السلام عليكم ورحمة الله وبركاته

الرسالة :
PHP كود :
[DCC Hint] Unit1.pas(30): H2365 Override method TUploaderThread.execute should match case of ancestor TThread.Execute 
وهل تشكل خطر ؟؟

في أمان الله,,
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
الرد
#2
هذا تحذير وليس خطأ

عندما تقوم بعمل overried لدالة virtual موجودة في الصنف الاب . المترجم يتوقع منك بعض implementation ولكن اذا وجد الدالة فارغة . يقوم بحذيرك فقط
الرد
#3
وعليكم السلام ورحمة الله وبركاته
جرب توجيه reintroduce عوض override لحذفها.
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
الرد
#4
بارك الله فيكم

إقتباس :عندما تقوم بعمل overried لدالة virtual موجودة في الصنف الاب . المترجم يتوقع منك بعض implementation ولكن اذا وجد الدالة فارغة . يقوم بحذيرك فقط
الإجراء Execute ليس فارغ أنظر الكود :
PHP كود :
protected
  
procedure Execute; override;
  
Procedure Upload;
-------------------------------------------------
procedure TUploaderThread.execute;
begin
  
If (Not Terminated) Then
     Upload
;
end; 
ماذا لو وضعة inherited; ذاخل الاجراء Execute :
PHP كود :
procedure TUploaderThread.execute;
begin
  inherited
;
  If (
Not Terminated) Then
     Upload
;
end; 
إقتباس :جرب توجيه reintroduce عوض override لحذفها.
[COLOR="DarkGreen"]نعم اخي الكريم حذفة الرسالة .....
[/COLOR]لكن ما الفرق بينهما (اصلا لم اعرف طبيعة هدا التحدير) ؟؟!

في أمان الله .
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
الرد
#5
inherited تقوم باستدعاء الحدث الأصلي قبل التعليمات التي بعده
reintroduce لإشعار الـ Compiler بإننا نريد (بالقوة) إعادة التعريف المنهج من جديد، وبالتالي لا ينذر يأي شيء
لا فرق (فيما أعلم) بينها وبين override من الناحية العملية.
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم