الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشاركة جماعية : الأشياء ألي تستشكل على مبرمجين C# الجدد

مغلق
بدأه MohannaD في 3 أبريل 2003 · 5 رد · 1,209 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم وقواكم الله يا شباب

هذا موضوع أرجو تثبيته من الأخ المشرف لأنه يهدف إلى عرض جميع الأمور (من جميع المبرمجين الجدد) ألي أستشكل فهمها عليهم حتى تعم الفائدة و يستفيد المبرمجين الثانيين وأنا راح أبدي أول مشاركه بعدة أشكالات :Pأستشكلت عليي :

1) أيش الفرق بين ال Destructer و ال Fainlize و ال Despose ومتى نستخدم كل منهم وكيف ؟

2) لماذا عند إستدعاء البانية للفئة الأساس أو الموروثة (Base) من البانية للفئة الوارثة نكتب الكود التالي :

Public Class A
{
   Public A(int a)
   {
      System.Console.WriteLine(a.ToString());
   }
}

Public Class B : A
{
   Public B(int a, int B) : base(a)
   {
      System.Console.WriteLine(b.ToString());
   }
}

وذلك بدلا من الكود التالي (راح أكتب فقط الكلاس الثاني لأن الكلاس الأول نفس البرمجة) :

Public class B : A
{
   Public B(int a, int B)
   {
      base.A(a); //this is the diffrent !!
      System.Console.WriteLine(b.ToString());
   }
}

3) مالفرق بين new و override ومتى أستخدم كل منهما مع ال methods وال virtual methods ؟؟

4) هل أستطيع لو كان عندي فئة A بها virtual method ولنقل أن إسمها talk وفئة ثانية أسمها B وارثه للفئة A وأقوم أعرف نفس ال virtual method أقصد talkفي الفئة B ةعلى أنهي virtual ..... هل أستطيع ذلك وماذا سوف يحصل ؟؟

5) كيف أعرف opreator تحويل (casting) في فئتي وما الفرق بين ال implicit و ال explicit ؟؟؟

وأخيرا شكرا لو ثقلنا عليكم موت :cool: لكن في النهاية الفائدة للجميع وشكرا ....

MohannaD, GarfielD1986s

#2

جميل أخي الكريم ..

عندما تكتمل الاجابة عن هذه الأسئلة فسوف يتم تثبيته أو وضعه كدرس ..

أتمنى أن اجيب على هذه الأسئلة ، لكن للأسف لا يتوفر لدي الوقت الآن ، سوف أحاول جهدي أن اكتب اجابة مختصرة في أقرب فرصة ، وندعوا الأخوة ممن يعرفون الإجابة للمشاركة ...

#3

مشكووور أخويي وما قصرت وعسى الله يحسبها في ميزان أعمالك ومن جهتي أنا راح أجاوب على السؤال الثاني لأني عرفت إجابته والسؤال كان :

اقتباس
2) لماذا عند إستدعاء البانية للفئة الأساس أو الموروثة (Base) من البانية للفئة الوارثة نكتب الكود التالي .... (التكمله فوق)

وجوابه هو :

لازم نكتب مثل هذا الكود :

Public Class A

{

   Public A(int a)

   {

      System.Console.WriteLine(a.ToString());

   }

}



Public Class B : A

{

   Public B(int a, int b) : base(a)

   {

      System.Console.WriteLine(b.ToString());

   }

}

عند أستعاء البانية حق الفئة الموروثة من الفئة الوارثة وذلك لسببين :

1) لأننا لا نستطيع إستدعاء البانية لأي فئة إستدعاء مباشر ولازم نسوي زي الكود السابق

2) ولأننا ما نبغى ال compiler في هذه الحالة أن يستدعي البانية الإفتراضية (البانية ألي ما فيها وسيطات أو prameters) لكن نبغى يستدعي بانية أحنا سويناها وفيها وسيطات

بس .... :D هذا كان حل الإشكال الثاني والباقي عليكم يا شباب وراح أجاوب انا إذا عرفت حل باقي الإشكالات ولا يبخل علينا أحد في طرح إشكالات والله يجازيكم خير

MohannaD, GarfielD1986s

#4

انا سوف احاول الاجابة باختصار على بعض النقاط، يمكن لاحقا اذا توفر الوقت بالتفصيل

بالنسبة لل Constructor فهو قطعة كود تنفذ عند حجز ذاكرة لكائن ما عبر الامر new أي اذا لديك مرجع لكائن يمكنك ان تحجز ذاكرة له بالامر new و من ثم هذا الامر سوف يتفذ اليا ال constructor

شيئ مثل الكود التالي

Public Class Axd
{
   Public Axd()
   {
      // code
   }
}

Public Class B 
{
   ……
   Public abc()
   {
	Axd a;
	A = new Axd();
   }
    ……
}

هدف الامر new هو حجز ذاكرة للكائنات، هو يختلف عن الامر override (الذي تستفسر عنه ايضا)، فالامر الاخر مختلف تماما

قد تجد الامر صعبا قليلا في ال constructors و الكائنات في سي شارب في بداية الامر، فالكائن قد يحتوي على static constructor و الذي لا ينفذ بالامر new بل ينفذ عند تشغل البرامج في الذاكرة و قد يحتوي الكائن على عدد 2 من ال constructors العادي و ال static ، يعتمد ذلك على تركيبة البرنامج

ال Destructor هي اخر قطعة كود تنفذ قبل ازالة الكائن من الذاكرة، و في مثالنا السابق سوف يكون كالتالي

Public Class Axd
{
   Public ~Axd()
   {
      // code
   }
}

و هدفه افراغ ذاكرة الكائنات التي قد يستخدمها الكائن الحالي، قد تكون مثلا بنيت برنامج كبير و به احد الكائنات لو ازيل من الذاكرة يجب ان يزيل عدد اخر من الكائنات معه، فكود الازالة يمكنك وضعه في ال Destructor

بالنسبة ل Finalize فانا لم استخدمها و لكني اعرف بانها تختص بتشغيل ال Destructor لازالة كائن ما، اذا انتبهت لتكنولوجيا .نت سوف تجد بان نظام ادارة الذاكرة قد يقرر افراغ الذاكرة في اية وقت يشائه هو وليس المبرمج، و الامر Finalize هو لارغامه على افراغ الذاكرة و تشغيل ال Destructors، و قد يستخدمه المبرمجين في برامج تعمل لمدة طويلة، مثل Servers ، فقد تترك جهاز ما مفتوح لأيام و عليه برنامج ما، افراغ الذاكرة قد يحدث مرة يوميا او مرة اسبوعيا ربما (بالطبع قد يحدث في اقل من ذلك) ولكن هناك حالات قد تشغل فيها ال Destructors و تعطل البرنامج (الحالات نادرة و تتعلق بالملفات، مثل ان تحاول اغلاق ملف عبر ال destructor بعد عدة ايام من فتحه (انا شاهد احدى الحالات في مؤتمر لمايكروسوفت العام السابق في تورونتو ولكني لا اتذكرها بالضبط)) المهم الهدف من الامر ارغام ال Garbage Collector على تنظيف الذاكرة

بالنسبة ل dispose فهو مثلا ال destructor و تستخدمه مايكروسوفت في كائناتها، هدفه مثل ال destructor ولكن يعمل لحظة استدعائه، أي انه لن يعمل اليا عند انتهاء الكائن من الذاكرة، ال Windows Forms تقوم بتشغليه داخليا فيما بينها، أي انه خاص بكود مايكروسوفت لا اكثر

بالنسبة للكائنات في سي شارب فهي موضوع واسع جدا حيث توفر مايكروسوفت طرق كثيرة للمناورة بها مثل كائنات تستخدم مباشرة باوامر static و كائنات تحجز لها ذاكرة و كائنات مختلطة و طرق كثيرة للمناورة بالاوامر و الوراثة التي في الكائنات و الكثير غير ذلك

انا صراحة بانصحك مراجعة المواصفات القياسية لسي شارب او قرائة كتاب متقدم عن الموضوع

#5

hi there ....:P i'm sorry becouse of my PC ... it is not able now to write by Arabic ... i do not know why but i'll thank Mr. Khoder for his answer and i'll answer the 4th qustion :

it was asked if we could make a virtual function its name is Talk for class A and make a class B inhernts from A (B:A) having a virtual method into it too and name it as Talk also ........... so what will happen and is that have any meaning ?

the ansower : actuly that will be worned by the Compiler telling you to make the seconde function to be overriden or newal and this have no meaning !! lol :cool:

thanks alot:p

MohannaD, GarfielD1986s

#6

تشكرو اخوانى على هذا العمل الطيب

وانا لى سوال يا استاذ خضر انت والاستاذة الكرام حول تقنية المراة فى البرنامج الذى اعددته حضرتك مسبقا وطرحت السوال وما حد اجاب ارجو ان تنظروا بعين الاعتبار لهذا السوال

http://www.arabteam2000.com/vb/showthread....36&pagenumber=2

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…