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

نام تاپیک: Interface Polymorphism

  1. #1
    کاربر دائمی آواتار dr_csharp
    تاریخ عضویت
    آبان 1386
    محل زندگی
    Tehran
    پست
    599

    Interface Polymorphism

    سلام
    من دو کلاس به نام های Car و Motor دارم که اینترفیس IDrivable رو پیاده سازی کردند.اگر کلاس Car دارای یک پراپرتی جدیدبنام Gear باشه نحوه ی دسترسی به اون چجوریه ؟
    اینترفیس IDrivable :

    interfaceIDrivable
    {
    void Start();
    void Stop();
    void MoveBack();
    void MoveForward();
    }


    کلاس Motor :

    classMotor:IDrivable
    {
    #region IDrivable Members
    voidIDrivable.Start()
    {
    Console.WriteLine("Motor Start");
    }
    voidIDrivable.Stop()
    {
    Console.WriteLine("Car Stop");
    }
    voidIDrivable.MoveBack()
    {
    Console.WriteLine("Motor Move Backward");
    }
    voidIDrivable.MoveForward()
    {
    Console.WriteLine("Motor Move Forward");
    }
    #endregion
    }

    کلاس Car :

    classCar:IDrivable
    {
    #region IDrivable Members
    publicvoid Start()
    {
    Console.WriteLine("Car Start");
    }
    publicvoid Stop()
    {
    Console.WriteLine("Car Start");
    }
    publicvoid MoveBack()
    {
    Console.WriteLine("Car Move Backward");
    }
    publicvoid MoveForward()
    {
    Console.WriteLine("Car Move Forward");
    }
    #endregion
    privateint m_Gear;
    publicint Gear
    {
    get
    {
    return m_Gear;
    }
    set
    {
    m_Gear =
    value;
    }
    }
    }

    کلاس Driver :

    classDriver
    {
    publicIDrivable Vehicle;
    publicvoid Drive()
    {
    Vehicle.Start();
    Vehicle.MoveForward();
    Vehicle.MoveBack();
    Vehicle.Stop();
    }
    }


    کلاس اصلی جهت استفاده :

    Driver driver = newDriver();
    driver.Vehicle =
    newCar();

    driver.Drive();


    چطور به پراپرتی Gear کلاس Car که در اینترفیس پیاده سازی نشده دسترسی داشته باشم ؟

  2. #2
    کاربر دائمی آواتار dr_csharp
    تاریخ عضویت
    آبان 1386
    محل زندگی
    Tehran
    پست
    599

    نقل قول: Interface Polymorphism

    آیا اصلا اینطوری میشه به عضو Gear از کلاس Car دسترسی داشت یا حتماباید instance جداگانه از کلاس Car بسازیم ؟

  3. #3
    کاربر تازه وارد آواتار Masiha1986
    تاریخ عضویت
    بهمن 1385
    محل زندگی
    تهران - شهرری
    پست
    36

    Lightbulb نقل قول: Interface Polymorphism

    با سلام
    می تونید type cast انجام بدین. به عنوان مثال:

    if (driver.Vehicle.GetType() == typeof(Car))
    {
    ((Car)driver.Vehicle).Gear = 1;
    Console.WriteLine(((Car)driver.Vehicle).Gear);
    }

  4. #4
    کاربر دائمی آواتار mohammad272005
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    تهران
    پست
    639

    نقل قول: Interface Polymorphism

    با جواب جناب Masiha1986 کاملا موافقم به شرط اینکه یقین کنید که driver.Vehicle یه car هست که این در مثال شما کاملا مشهوده.

  5. #5
    کاربر دائمی آواتار dr_csharp
    تاریخ عضویت
    آبان 1386
    محل زندگی
    Tehran
    پست
    599

    نقل قول: Interface Polymorphism

    نقل قول نوشته شده توسط Masiha1986 مشاهده تاپیک
    با سلام
    می تونید type cast انجام بدین. به عنوان مثال:
    if (driver.Vehicle.GetType() == typeof(Car))
    {
    ((Car)driver.Vehicle).Gear = 1;
    Console.WriteLine(((Car)driver.Vehicle).Gear);
    }
    آیا ازنظر رعایت اصول شی گرایی اینکار خللی تو سیستم وارد نمیکنه!؟اصلا polymorphism جهت سهولت در کدنویسی و عدم انجام عملیات تکراریه یا تو عملکرد سیستم هم موثره ؟

  6. #6
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736

    نقل قول: Interface Polymorphism

    نقل قول نوشته شده توسط dr_csharp مشاهده تاپیک
    چطور به پراپرتی Gear کلاس Car که در اینترفیس پیاده سازی نشده دسترسی داشته باشم ؟
    با سلام
    شکلی که سوال را پرسیدید اشتباه است.
    ۱)اینترفیس نیست که پیاده سازی میکند، اینترفیس وجود قابلیتها را تعریف میکند.
    ۲)استفاده از یک خصوصیت که در اینترفیس تعریف نشده و کست به یک تایپ به خصوص ،خلاف ایده استفاده از اینترفیس است.
    ۳)سوال درست این است که چرا قابلیت دسترسی به دنده را در اینترفیس تعریف نمیکنید؟

  7. #7
    کاربر دائمی آواتار dr_csharp
    تاریخ عضویت
    آبان 1386
    محل زندگی
    Tehran
    پست
    599

    نقل قول: Interface Polymorphism

    نقل قول نوشته شده توسط اَرژنگ مشاهده تاپیک
    با سلام
    سوال درست این است که چرا قابلیت دسترسی به دنده را در اینترفیس تعریف نمیکنید؟
    چون ممکنه گاها بین کلاس های موجود بخوایم یکی از کلاسها ویژگی خاصیداشته باشه.مثلا در اینجا از بین Motor و Car و Truck و دیگر وسائط نقلیه موجود تنها Car دارای Gear است.

  8. #8
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736

    نقل قول: Interface Polymorphism

    نقل قول نوشته شده توسط dr_csharp مشاهده تاپیک
    چون ممکنه گاها بین کلاس های موجود بخوایم یکی از کلاسها ویژگی خاصیداشته باشه.مثلا در اینجا از بین Motor و Car و Truck و دیگر وسائط نقلیه موجود تنها Car دارای Gear است.
    اگر این طور باشد دیگر استفاده از اینترفیس برایه چیه؟ اینکه تمام فواید استفاده از اینترفیس را بباد میده.
    یا باید در اینترفیس تعریف بشد و به یک شکل در همه جا استفاده بشه یا اینکه باید به اینکه با چه کلاس بخصوصی استفاده میشه با اینترفیسهایه کلاسی کار کرد.
    این شکل قاطی کردنشان مثل این میماند که بگیم نصف خانه را از بتون و بعضی جاهش را از خشت درست میکنیم. که هم از بتون فایده ببیم و هم اینکه تابستان خنک باشد.
    یا به یک عبارت دیگر به این میگویند آرکیتکتچر فرانکشتن، یک چیزی غول بیشاخ دم سره کردن.
    باید اینکه با کدام آرکیتچر قراره استفاده بشد تصمیم بگیرند.

  9. #9
    کاربر دائمی آواتار dr_csharp
    تاریخ عضویت
    آبان 1386
    محل زندگی
    Tehran
    پست
    599

    نقل قول: Interface Polymorphism

    یه پروژه ای مثل انتخاب واحد دانشگاه و در نظر بگیرید
    قراره نام استاد و نام دانشجو و نام درس انتخاب شده هریک در فایلی متنی قرار بگیره و امکان جستجو وجود داشته باشه.
    بنظر شما در چه بخشی از این پروژه امکان استفاده از polymorphism وجود داره ؟
    راستش چون قبلا توجهی به این تکنیک نداشتم کاربرد polymorphism تو پروژه ها برام گنگه.ممنون میشم دوستان مثالهایی رو که تا بحال کار کردن بیان کنند.

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

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