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

نسخة كاملة : مشكل التعامل مع Generic Interface
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله تعالى وبركاته

عيدكم مبارك وكل عام وانتم بخير

قمت بعمل وحدة جديدة تحتوي على class الهدف منها هو عمل implementation للـ Generic interface IComparer , حيث هذه الأخيرة معرفة في وحدة Generics.Defaults كما يلي :

كود :
IComparer<T> = interface     function Compare(const Left, Right: T): Integer;   end;

وهذه الوحدة التي أنشائتها :

كود :
unit uMyComparer; interface uses Generics.Defaults; type   TPersonne = record     ID : word;     Nom : String[30];     Age : byte;   end;   TMyComparer<TPersonne> = class(TInterfacedObject, IComparer<TPersonne>)     public       function Compare(const Left, Right: TPersonne): Integer;   end; implementation { TMyComparer<TPersonne> } function TMyComparer<TPersonne>.Compare(const Left, Right: TPersonne): Integer; begin   Result := left.ID - Right.ID; end; end.

المشكلة : توجد في السطر 
كود :
Result := left.ID - Right.ID

ومضمونها : انه لم يتم التعرف على الحقل ID 

السؤال : ماسبب الخطأ, وماهي خطوات حله؟
غير
PHP كود :
TMyComparer<TPersonne> = class(TInterfacedObject, IComparer<TPersonne>) 

الى
PHP كود :
TMyComparer = class(TInterfacedObject, IComparer<TPersonne>) 

التوثيق يقول أنه من الافضل استخدام TComparer بدل استخدام IComparer

هل تريد الترتيب في TList<T>؟ اذا نعم, فالحل في تعليقك السابق

وتفقد المثال المرفق.
بارك الله فيك اخي سفيان (تحية خالصة)
لقد حلت المشكلة

نعم كنت أريد ترتيب القائمة TList وكنت اعلم الحل (الذي وضعته في الموضوع السابق الذي اشرت إليه), لكن لم اكن افقه في مفهوم interface فذهبت ودرسته تم عدت لأطبقه على IComparer فوجهت تلك المشكلة.


الحل الذي تطرقت له يجب أن يحقق الشرط التالي وإلا لن يشتغل :
           - يجب إنشاء كلاس جديدة مشتقة من الكلاس Generic TList, كما فعلت.

في حالة إستعمالها مباشرتا : 
كود :
TPersonList:= TList<TPerson>.Create; TPersonList.Sort(TPersonComparer.Create);

لن يشتغل البرنامج والسبب :

كود :
[dcc32 Error] uFrmMain.pas(149): E2250 There is no overloaded version of 'Sort' that can be called with these arguments

لذلك يجب إتباع خطوات الأخ سفيان الموجودة في الملف الذي ارفقه.