أخواني الأعزاء أرجو منكم ان تكتبوا لنا درس بسيط ومرفق بالأمثلة عن موضوع Overloading&Overrides
وشرح الفرق بينهم.
وشكرا...
-- محمود
أخواني الأعزاء أرجو منكم ان تكتبوا لنا درس بسيط ومرفق بالأمثلة عن موضوع Overloading&Overrides
وشرح الفرق بينهم.
وشكرا...
-- محمود
السلام عليكم ورحمة الله
اولا ال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
اللهم ارزقنا فهم النبيين وحفظ المرسلين
الشركة التطبيقية لخدمات الحاسب الالي [حاسب]
ايضا ترتيب ال parameters من ضمن الشروط
Oracle 10G Certified Professional Developer.
عودة بعد 3 سنوات غياب، ان شاء الله سوف اتكلم معكم قريبا احبائي
جزاك الله خيرا علي الاضافة
اللهم ارزقنا فهم النبيين وحفظ المرسلين
الشركة التطبيقية لخدمات الحاسب الالي [حاسب]
شكرا جزيلا على الشرح الرائع
-- محمود
ماشاء الله تمام
بس انا عايز اسال عن override وال virtual واستخدماتهم
وشكرا
هذا الموضوع مغلق.
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…