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

ممكن شرح بسيط ومرفق بالأمثلة عن موضوع Overloading&Overrides

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

أخواني الأعزاء أرجو منكم ان تكتبوا لنا درس بسيط ومرفق بالأمثلة عن موضوع Overloading&Overrides

وشرح الفرق بينهم.

وشكرا...

-- محمود

#2

السلام عليكم ورحمة الله

اولا الOverloads

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

1-عدد الPrametars او المدخلات للدالة

2- نوع الParmetars اللي مبعوت للدلة

3- طريقة اللPassing يعني ref او Out او value

مثال وهاشرحة علي الConstructor

using system;
class tester
{
tester()//no prametar
{
//do any thing here
}
tester(int x)
{
//do any thing here with x
}
tester(ref int x)
{
//do any thing
}
public static void Main()
{
tester t=new tester();//1st constructor
tester t2=new tester (5); 2nd constructor
int x= 10;
tester t2=new tester(ref x);3rd constructor
}
}

وطبعا ممكن تتطبق ده علي الدوال العادية

نيجي بقي علي الOverrideing

دول بقي دالتين بنفس الاسم ونفس المواصفات بالظبط بس دي في كلاس ودي في كلاس تاني وارثين من بعض يعني

المثال برده علي الConstructor

using System;
class test
{
public test()
{
Console.WriteLine("Welcome");
}
}
class tester:test
{
tester()
{
Console.WriteLine("Bye");
}
public static void Main()
{
tester t1=new tester();
//print Welcome First then Bye
}
}
}

لو داله عادية بقي الموضوع هايختلف شوية

هايطلع عندنا حاجتين يا اما Hide يا اما Override

في حال الHide الدالتين بنفس المواصفات وكلاسين مختلفين عادي بس بالشكل ده

class test
{
public void Print()
{
Console.WriteLine("Welcome");
}
}
class tester:test
{
new void Print()
{
Console.WriteLine("Bye");
}
public static void Main()
{
tester t1=new tester();
t1.Print();
//print Bye
}
}

طيب ليه هايطبع Bye معملش زي الConstructor ليه؟

لان في حالة الConstructor مافيش ابن من غير اب

يعني لازم ينشيء الاب الاول علشان كده طبع Welcome وبعدين Bye

انما في حالة الدوال اعادية بيدخل علي الدالة الي في الكلاس اللي منة الObject لان الCompiler بيمشي بطرقة اسمها By type ده الDefulte بتاعة

فنوع الObject من كلاس tester

وايه كلمة new دي يعني عمل Hide للدالة اللي في الBase Class بمعني اصح خفاها خالص ونفز الي في Drived class

طيب لو انا عملت كده

test t=new testet

يعني النوع من الكلاس الكبير او الاب والمحتوي بتاع الObject من الكلاس الابن في الحالة دي عايز الCompiler يمشي By Contient مش By Type كالعاده

فبعمل كده

class test
{
public virtual void Print()
{
Console.WriteLine("Welcome");
}
}
class tester:test
{
override void Print()
{
Console.WriteLine("Bye");
}
public static void Main()
{
test t1=new tester();
t1.Print();
//print Bye
}
}

يارب اكون قرت اوصلك اللي انت عايزه

تم تعديل هذه المشاركة بواسطة hock في 1 سبتمبر 2006 في 23:52

اللهم ارزقنا فهم النبيين وحفظ المرسلين

Hock341@yahoo.com

الشركة التطبيقية لخدمات الحاسب الالي [حاسب]

http://www.hasib.com.sa

مدونتي

#3

ايضا ترتيب ال parameters من ضمن الشروط

Oracle 10G Certified Professional Developer.

عودة بعد 3 سنوات غياب، ان شاء الله سوف اتكلم معكم قريبا احبائي

#4

جزاك الله خيرا علي الاضافة

اللهم ارزقنا فهم النبيين وحفظ المرسلين

Hock341@yahoo.com

الشركة التطبيقية لخدمات الحاسب الالي [حاسب]

http://www.hasib.com.sa

مدونتي

#5

شكرا جزيلا على الشرح الرائع

-- محمود

#6

ماشاء الله تمام

بس انا عايز اسال عن override وال virtual واستخدماتهم

وشكرا

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

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

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

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

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

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