![]() |
|
كيف يتم نسخ كلاس إلى آخر ؟ - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : كيف يتم نسخ كلاس إلى آخر ؟ (/showthread.php?tid=6483) الصفحات:
1
2
|
كيف يتم نسخ كلاس إلى آخر ؟ - ALmuhhnad - 13-10-2014 السلام عليكم ورحمة الله وبركاتة لتو بدأت مع الـ OOP بشكل جاد , وها أنا في اول المطباتسؤالي هو كتالي : كيف اقوم بنسخ محتويات كلاس إلى كلاس آخر ؟ لدي هذا الكود : PHP كود : unit Unit1;كيف أقوم بنسخ محتويات Man1 إلى Man2 ؟ اريــ ـد نسخ المحتويات وليس إعطاء Man2 مؤشر إلى محتويات Man1 حيث لو قمت بإستدعاء الدالة Free لـ Man1 , ستذهب المعلومات من Man2 كذلك ! وكذلك نفطة آخرى .. عندما استعمل الأمر : PHP كود : Man1.PhoneNumbers.Add('XXXXXXXXXXXX'); اتمنى اني وضحت المشكلة وشكراً لحسن القارءة كيف يتم نسخ كلاس إلى آخر ؟ - SMP3 - 13-10-2014 السلام عليكم .. فكرة رائعة و صائبة أن تتعلم ال oop .. صدقني عندما تتقنها ستندم لأنك لم تتعلمها في وقت سابق :eek: إقتباس :سؤالي هو كتالي : كيف اقوم بنسخ محتويات كلاس إلى كلاس آخر ؟ للأسف , دلفي لا تدعم بشكل مباشر نسخ كلاس الى كلاس آخر . لكن يمكن تطبيقها بطريقتين : - الطريقة الأولى استعمال ال RTTI : تعتمد هذه الطريقة على enum لجميع ال properties ثم اسناد قيمها الى الكلاس . أسلوب عملها مشابه تماما لل Object Inspector . بما أنك تتعلم خطوة بخطوة .. فأنا لا أنصحك باستعمالها حتى تتقن ال OOP بشكل جيد . -الطريقة الثانية توريث الكلاس من TPersistent : الكلاس TPersistent يحتوي على اجراء assign لنسخ الكلاس .. لعلك لاحظت أن أغلب الكلاسات مورثة منه : TCanvas,TFont,TButton,.. الفكرة تعتمد على عمل override للاجراء AssignTo ثم اسناد القيم الى الكلاس الجديد . ملاحظة : الطريقة الثانية هي الطريقة الشائعة في نسخ الكلاسات ![]() ------------------------------------------------------------------- دائما اجعل أول حرف من الدالة uppercase .. PHP كود : setPhoneNumbersالمتغيرات دائما تبدأ بحرف F اختصار الى Field . و الدوال تبدأ بحرف uppercase . يستحسن أن تستلزم بهذه المسلمات حتى يستطيع غيرك قراءة أكوادك ![]() إقتباس :يحصل خطا حيث اني لم أعمل Create للقائمة .. هل يجب ان اعدل الدالة Create الخاصة بالكلاس واضع فيها امر انشاء القائمة ؟ بالضبط , FPhoneNumbers عبارة عن Object .. و أي Object يجب أن يتم انشائه قبل استخدامه . PHP كود : typeبالتوفيــــق . كيف يتم نسخ كلاس إلى آخر ؟ - ALmuhhnad - 13-10-2014 إقتباس :فكرة رائعة و صائبة أن تتعلم ال oop .. صدقني عندما تتقنها ستندم لأنك لم تتعلمها في وقت سابقلا زلت اتذكر نصيحتك لي في احد المواضيع عندما قلت ان الـ OOP مهمه جداً..إلخ رغم اني لم اتبعها للاسف لكن ما اجبرني على تعلم الـ OOP عندما بدأت البرمجة على C Plus Puls تحديداً على Qt Creator فهناك كان كل شيء يتم من خلال OOP وبدون استعمالها لا استطيع برمجة برنامج جيد فاُجبرت على تعلم الـ OOP .. فانا من البداية كنت اتجنب الإصطدم بـ OOP لني لم افهمها من المره الاولى xD ----------------------------------- تمام كل شيء في مكانه ![]() لكن لدي سؤال صغير ماذا يقصد بالـ الكلمات التي تأتي بعد الدوال مثل PHP كود : virtual ,override ..etc وكذلك لماذا وضعت الدالة PHP كود : procedure AssignTo(Dest: TPersistent); override; كيف يتم نسخ كلاس إلى آخر ؟ - SMP3 - 13-10-2014 إقتباس :لكن لدي سؤال صغير ماذا يقصد بالـ الكلمات التي تأتي بعد الدوال مثل virtual : تعني أن الدالة مسموح بأن يتم توريثها من الكلاس الابن override : و تعني اعادة التوريث . dynamic : تعمل نفس عمل virtual لكن الآلية مختلفة . يفضل أن تستخدم virtual بدل dynamic لأن الأولى أسرع .. سابقا عندما كانت الرام لا تتجاوز 32 مب كانوا يستخدمون dynamic لانها لا تستهلك من الرام الكثير ..لكنها بطيئة جدا مقارنة مع virtual . الق نظرة على هذا المثال البسيط ليوضح لك الفكرة : PHP كود : program Project1;إقتباس :وكذلك لماذا وضعت الدالة protected : تعني أن الدالة قابلة للنداء فقط من الكلاسات المورثة من الكلاس المصرحة بها private : الدالة قابلة للنداء داخل ال Unit فقط . في المثال الذي كتبته : AssignTo : غير قابلة للنداء خارج الكلاس .. بمعنى كود مثل هذا خاطئ : PHP كود : var PHP كود : unit Unit2;PHP كود : program Project1;كيف يتم نسخ كلاس إلى آخر ؟ - Amer12 - 14-10-2014 SMP3 كتب : دلني على مرجع مناسب للمبتدئين لتعلم oop بإستخدام دلفي. كيف يتم نسخ كلاس إلى آخر ؟ - ALmuhhnad - 14-10-2014 بالنسبة لي فهذا هو الكتاب الذي تعلمت منه الـ OOP في دلفي من تأليف "عروة علي عيسى" http://www.delphi4arab.net/forum/showthread.php?tid=97 كيف يتم نسخ كلاس إلى آخر ؟ - SMP3 - 14-10-2014 أفضل و سيلة هي الاطلاع على كلاسات دلفي . كيف يتم نسخ كلاس إلى آخر ؟ - ALmuhhnad - 15-10-2014 إقتباس :أفضل و سيلة هي الاطلاع على كلاسات دلفي+1 فلا يوجد كتاب يتكلم عن كل ما تحتويه دلفي 100% على حد علمي بالمناسبة اخي smp3 هل لك ان تذكر الطريقة المتبعه بإستخدام rtti يبدو اني ساحتاجها قريباً كيف يتم نسخ كلاس إلى آخر ؟ - SMP3 - 15-10-2014 ALmuhhnad كتب :+1 ستحتاج الى أن تكون على علم بالتقنيات التالية : [COLOR="Red"]- Generics & Collections - OOP - RTTI [/COLOR] خذلك أولا قهوة ثقيلة .. ثم توكل على الله .. ثم اطلع على هذا الرابط : كود : http://delphihaven.wordpress.com/2011/06/09/object-cloning-using-rtti/بعد ان تتطلع على الرابط .. يمكنك البدأ في دراسة طريقة عمل Object Inspector كود : http://www.delphi4arab.net/forum/showthread.php?tid=11010كيف يتم نسخ كلاس إلى آخر ؟ - me_delphi - 16-10-2014 السلام عليكم عندما تقوم بانشاء اوبجكت من كلاس فان هدا الأبجكت يشغل مساحة من الداكرة ولنسخ الأوبجكت يكفي معرفة المساحة التي يشغلها انظر المثال كتبته بشكل سريع PHP كود : unit Unit1; |