نمایش نتایج 1 تا 6 از 6

نام تاپیک: اجبار کلاس های فرزند به پیاده سازی یک تابع با خروجی های متفاوت

  1. #1

    اجبار کلاس های فرزند به پیاده سازی یک تابع با خروجی های متفاوت

    سلام.
    من یه کلاس پدر و چندین کلاس فرزند دارم.
    یه تابع میخوام بنویسم که یه لیست برمی گردنه. اون لیست برای هر کلاس فرزند لیستی از خودشه.مثل زیر:

    Public class City:ParentClass
    {
    Public List<City> SelectAll()
    {
    //
    }
    }

    Public class Activity:ParentClass
    {
    Public List< Activity> SelectAll()
    {
    //
    }
    }


    سوالم اینه:
    با توجه به اینکه خروجی های متدSelectAll متفاوته میشه کاری کرد که کلاس های فرزند مجبور باشن SelectAll رو پیاده سازی کنن؟

  2. #2
    کاربر دائمی
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    کنار یه ساحل خیلی زیبا
    پست
    922

    نقل قول: اجبار کلاس های فرزند به پیاده سازی یک تابع با خروجی های متفاوت

    اگر میخوای اجبار به پیاده سازی باشه باید از یه اینترفیس ارث ببرن ولی اینکه میخوای هر کدوم در یک متد مشترک اطلاعات مختص به خودشون رو برگردونن متد موردنظرت رو در کلاس پایه virtual تعریف کن و توی کلاسه های فرزند اون رو اورراید کن

  3. #3

    نقل قول: اجبار کلاس های فرزند به پیاده سازی یک تابع با خروجی های متفاوت

    نقل قول نوشته شده توسط esafb52 مشاهده تاپیک
    اینکه میخوای هر کدوم در یک متد مشترک اطلاعات مختص به خودشون رو برگردونن متد موردنظرت رو در کلاس پایه virtual تعریف کن و توی کلاسه های فرزند اون رو اورراید کن
    دوست عزیز با توجه به اینکه return type هاشون متفاوته نمیشه اونها رو override کرد.

  4. #4
    کاربر دائمی آواتار wolf_majid
    تاریخ عضویت
    آذر 1387
    محل زندگی
    اصفهان
    پست
    534

    نقل قول: اجبار کلاس های فرزند به پیاده سازی یک تابع با خروجی های متفاوت

    این شاید کارت رو راه بندازه
     public interface ITest<T> where T:class
    {
    List<T> SelectAll();
    }


    internal class my1 : ITest<my1>
    {
    public int x;
    public List<my1> SelectAll()
    {
    return new List<my1>{this};
    }
    }

    internal class my2 : my1
    {
    public int y;
    }


    تست :
     my1 m1=new my1();
    m1.x = 10;
    my2 m2=new my2();
    m2.x = 20;
    m2.y = 100;

    m2.SelectAll().ForEach(x=>MessageBox.Show(x.x.ToSt ring()
    +"\n"+(x as my2).y.ToString()
    ));

  5. #5
    کاربر دائمی آواتار wolf_majid
    تاریخ عضویت
    آذر 1387
    محل زندگی
    اصفهان
    پست
    534

    نقل قول: اجبار کلاس های فرزند به پیاده سازی یک تابع با خروجی های متفاوت

    و یا :
     public abstract class AbsClass<T> where T:class
    {
    public abstract List<T> SelectAll();
    }


     internal class my1 :AbsClass<my1>
    {
    public int x;

    public override List<my1> SelectAll()
    {
    return new List<my1>{this};
    }
    }

    internal class my2 : my1
    {
    public int y;
    public override List<my1> SelectAll()
    {
    return new List<my1>{this};
    }
    }


    تست :
      my1 m1 = new my1();
    m1.x = 10;
    my2 m2 = new my2();
    m2.x = 20;
    m2.y = 100;

    m2.SelectAll().ForEach(x => MessageBox.Show(x.x.ToString()
    + "\n" + (x as my2).y.ToString()
    ));



    بدون جنریک :
     public abstract class AbsClass
    {
    public abstract List<AbsClass> SelectAll();
    }


     internal class my1 :AbsClass
    {
    public int x;


    public override List<AbsClass> SelectAll()
    {
    return new List<AbsClass>{this};
    }
    }

    internal class my2 : my1
    {
    public int y;
    public override List<AbsClass> SelectAll()
    {
    return new List<AbsClass>{this};
    }
    }


    تست :
     my1 m1 = new my1();
    m1.x = 10;
    my2 m2 = new my2();
    m2.x = 20;
    m2.y = 100;

    m2.SelectAll().ForEach(x => MessageBox.Show((x as my2).x.ToString()
    + "\n" + (x as my2).y.ToString()
    ));

  6. #6

    نقل قول: اجبار کلاس های فرزند به پیاده سازی یک تابع با خروجی های متفاوت

    اونی که با Interface نوشته بودید تا حدی کارمو راه انداخت.ممنونم

تاپیک های مشابه

  1. پاسخ: 32
    آخرین پست: پنج شنبه 25 خرداد 1391, 10:27 صبح
  2. پیاده سازی درست سوالات و جواب های آزمون آنلاین
    نوشته شده توسط smrb59 در بخش ASP.NET Web Forms
    پاسخ: 3
    آخرین پست: شنبه 21 شهریور 1388, 00:46 صبح
  3. سوال: اطلاعات کلی درباره نحوه پیاده سازی سه بعدی با ویژگی های زیر
    نوشته شده توسط amindiary در بخش Java SE : نگارش استاندارد جاوا
    پاسخ: 0
    آخرین پست: دوشنبه 21 اردیبهشت 1388, 03:03 صبح
  4. پیاده سازی پشته جهت ذخیره داده های رشته ای
    نوشته شده توسط mehdi5106 در بخش الگوریتم، کامپایلر، هوش مصنوعی و ساختمان داده ها
    پاسخ: 3
    آخرین پست: دوشنبه 08 بهمن 1386, 17:14 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •