تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 7 از 7

نام تاپيک: سؤال راجع به interface در #C

  1. #1
    داره خودمونی میشه CG_'s Avatar
    تاريخ عضويت
    May 2008
    پست ها
    96

    پيش فرض سؤال راجع به interface در #C

    سلام. لزوم استفاده از interface چیه؟ میشه یکم توضیح بدید؟ اصلاً این چیه؟ من هرچی خوندم نفهمیدم.
    راستی vb.net و بقیه زبون های interface ، .Net دارن؟ اگر زحمتی نیست، فرق اون با interface ها در java هم بگید.
    مرسی از توجهتون
    Last edited by CG_; 20-05-2008 at 12:29.

  2. #2
    آخر فروم باز
    تاريخ عضويت
    Dec 2004
    پست ها
    1,648

    پيش فرض

    هر زبونی که شی گرا باشه داره کاربرد اینترفیس در پلی مورفیسم مشخص می شه اگر میخوای بدونی باید مورفیسم را بخوانی

  3. #3
    داره خودمونی میشه CG_'s Avatar
    تاريخ عضويت
    May 2008
    پست ها
    96

    پيش فرض

    خیلی ممنون از لطفتون. حتماً دنبالش می رم.

  4. #4
    حـــــرفـه ای Ultimator's Avatar
    تاريخ عضويت
    May 2007
    محل سكونت
    NetFrameWork.
    پست ها
    3,239

    پيش فرض

    با سلام
    همانطور که می دانید C# از ارثبری های چند گانه پشتیبانی نمی کنه (ارثبری چندگانه به این منظور که یک کلاس از چندین کلاس ارث ببرد) ولی برای اینکه این ضعف را بپوشاند Interface ها را معرفی می کند. حال شاید بگویید چرا ضعف؟ ارثبری های چندگانه قدرتیست که نصیب C++ شده. ولی چرا این قدرت در C# نیست؟ مگر جد C# زبان C++ نیست؟
    بله تمام این حرفها درست، ولی ارثبری های چندگانه باعث پیچیدگی خاصی می شه و شاید یکی از علتهای اینکه این قابلیت در C# نیست این هست که از پیچیدگی C# کاسته شود و زبانی ساده باشه.
    .... اطلاعات بیشتر خواهیم کپی پیستاند !

  5. #5
    داره خودمونی میشه
    تاريخ عضويت
    Jun 2006
    محل سكونت
    Tehran
    پست ها
    48

    پيش فرض

    interface یک قرارداد در نوع رفتار یک کلاس است.هر کلاس که از آن استفاده کند تضمین می کند که پیاده سازی تمام متدها و خاصیت ها و .. که در آن interface قرار دارد را در خود ایجاد کند .

  6. #6
    داره خودمونی میشه CG_'s Avatar
    تاريخ عضويت
    May 2008
    پست ها
    96

    پيش فرض

    .... اطلاعات بیشتر خواهیم کپی پیستاند !
    جسارتاً چی شد پس؟

  7. #7
    حـــــرفـه ای Ultimator's Avatar
    تاريخ عضويت
    May 2007
    محل سكونت
    NetFrameWork.
    پست ها
    3,239

    پيش فرض

    حالا که عجله داری بیا مطلبی بدون هیچ گونه دخل و تصرف 100% کپی و پیست
    میخواستم کاملش کنم اما فرصت نشد ..


    اول یک مفهم پیاده سازی(Implement) رو توضیح دهم :
    به طور مثال زمانی که ما متدی را ایجاد می کنیم و هیچ کدی در آن تا به حال ننوشته شده باشه را می گوییم این متد پیاده سازی نشده است، همچنین اگر کدی را در آن بنویسیم به اصطلاح می گوییم این متد پیاده سازی شده است.

    interface ها همانند کلاس ها ایجاد می شوند با این تفاوت که به جای کلمه کلیدی class از interface استفاده می کنیم، ببینید :

    کد:

    public class MyClass {
    }

    public interface MyInterface {
    }

    ولی interface ها تفاوت عمده ای که با class ها دارند این هست که ما متد های کلاس را در خود کلاس پیاده سازی می کنیم ولی در interface نمی توانیم متد های آن را پیاده سازی کنیم.
    دو تفاوت دیگر اینه که نمی توانیم access modifier یی همچون public، privateو ... نمی توانیم برای متد ها تعیین کنیم. تفاوت دیگر این است که در interface ها هیچ فیلدی (متغیری) نمی توانیم تعریف کنیم.
    کلاس ها می توانند از حد اکثر یک کلاس دیگر ارث ببرند ولی می توانند از تعداد نا محدودی از interfaceها ارث ببرند. کاری که interfaceها انجام می دهند کلاسها را ملزم به پیاده سازی متدها و خاصیتهای(Properties) interfaceهای به ارث برده شده می کنند.
    خوب حال بحث polymorphism را شروع می کنیم.
    بگذارید مفهوم کلاس پایه و کلاس مشتق را با یک مثال توضیح دهم :

    کد:
    public class BaseClass {
    }

    public class DerivedClass : BaseClass {
    }

    خوب مثال بالا گویای همه چیز است و خود ناچیز پس نیازی به توضیح نداره.
    زمانی که ما یک نمونه(Instance) از کلاس DerivedClass ایجاد می کنیم می توانیم آن را درون BaseClass بریزیم، منظورم را با یک مثال می گویم :

    کد:
    BaseClass MyBC = new DerivedClass();

    دلیل اینکه ما می توانیم چنین کاری را انجام دهیم این است که کلاس مشتق تضمین می کنه که تمام خصوصیات کلاس پایه را داراست. (البته توجه داشته باشید که دیگر با نوشتن MyBC و با . دیگر به اعضای کلاس DerivedClass دسترسی نداریم و فقط به اعضای کلاس BaseClass دسترسی داریم (البته با روشهایی همچون type casting به اعضای DerivedClass کلاس دستری داشته باشیم.))
    خوب حال چه ربطی به interfaceها دارد؟ (interfaceها را نیز می توان همانند کلاس بایه از آن ها استفاده کرد.)

    به مثال زیر توجه کنید تا با interfaceها بیشتر آشنا شوید :
    (بر اساس قانون اساسی C# ابتدای interfaceها را با حرف I بزرگ شروع می شود، البته این قانون تبصره هایی هم داره .)

    کد:
    public interface IPrintable {
    void Print();
    }

    public class MyClass1 : IPrintable {

    #region IPrintable Members

    public void Print() {
    Console.WriteLine("MyClass1 print method called");
    }

    #endregion
    }

    public class MyClass2 : IPrintable {

    #region IPrintable Members

    public void Print() {
    Console.WriteLine("MyClass2 print method called");
    }

    #endregion
    }

    متد زیر را به کلاس program اضافه می کنیم :
    (چون interfaceیی که درست کردیم به نام IPrintable تضمین می کند که اشیایی که در آن قرار می گیرند دارای متد با نام Print هست می توانیم به شکل زیر عمل کنیم )

    کد:
    private static void PrintClassInfo(IPrintable prn) {
    prn.Print();
    }

    حال در main برنامه (Console Application) را ببینید چگونه می توانیم از آن استفاده کنیم :

    کد:
    PrintClassInfo(new MyClass1());
    Console.ReadLine();

    PrintClassInfo(new MyClass2());
    Console.ReadLine();

    نکته ای که توجه کردن به آن مفید است اینه که زمانی که کلاسی را از interfaceیی ارث رفته می توانید روی آن interface کلیک کنید و سپس کلیدهای Shift + Alt + F10 را بزنید منویی باز می شود اولین گذینه آن را انتخاب کنید. می بینید که متدهایی که در آن interface بود در این کلاس نوشته می شوند و فقط باید آن را پیاده سازی کنید.
    (در این نوشته بیشتر روی متد تکیه کرده بودم ولی همین موارد برای خاصیت ها هم صادق هست.)
    می بینید که interface ها نقش بسیار مهمی را ایفا می کنند و ضعف ارثبری چندگانه را می پوشانند.

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •