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

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




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

نام تاپيک: چرا باید Extension Method ها استاتیک باشند؟

  1. #1
    آخر فروم باز
    تاريخ عضويت
    Jul 2009
    پست ها
    6,351

    پيش فرض چرا باید Extension Method ها استاتیک باشند؟

    سلام و عرض وقت بخیر خدمت اساتید

    چرا باید هم کلاس و هم متد اجبارا Static باشند؟
    کلمه کلیدی this دقیقا به چه منظور است؟


  2. #2
    داره خودمونی میشه
    تاريخ عضويت
    Jun 2014
    پست ها
    171

    پيش فرض

    ........................... .
    Last edited by B-Prot; 25-07-2015 at 18:24.

  3. #3
    داره خودمونی میشه
    تاريخ عضويت
    Jun 2014
    پست ها
    171

    پيش فرض

    .............................. .
    Last edited by B-Prot; 25-07-2015 at 18:25.

  4. #4
    اگه نباشه جاش خالی می مونه
    تاريخ عضويت
    Jul 2014
    محل سكونت
    گناباد
    پست ها
    232

    پيش فرض

    کلمه کلیدی this برای اشاره به فرم جاری و توابع آن استفاده میشود...

  5. #5
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    نقل قول نوشته شده توسط Life24
    چرا باید هم کلاس و هم متد اجبارا Static باشند؟
    از نظر تئوری متد باید static باشد ولی اجبار static بودن کلاس نوعی محکم کاری و تمیز کاری است که کارها مخلوط نشوند.
    اتفاقاً لغو اجبار static بودن کلاس جزء مواردی است که مدت هااست [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] و رای های مثبت و منفی هم گرفته ... که مهم در جواب شما آن است که از نظر تئوری میشود کلاس static نباشد ولی بحث مزیت و ایراد آن خارج از حوصله من و شماست و ارزشی هم ندارد ...


    ولی static بودن متد واجب است، چون تابع باید بدون نیاز به نمونه سازی کلاس و بطور مستقیم قابل استفاده باشد.
    اجازه دهید با مثالی مطلب را دنبال کنیم:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    در واقع خط int a یک جور کوتاه نویسی خط int b است، کامپایلر فقط برای راحتی ما خط int a را میپذیرد و جای آن دقیقا خطی مشابه int b قرار میدهد.
    Extension فقط یک جور خلاصه نویسی در استفاده از توابع static است.

    نقل قول نوشته شده توسط Life24
    کلمه کلیدی this دقیقا به چه منظور است؟
    کلمه this در اینجا دو جنبه دارد ...
    الف) از جنبه شهودی نشان میدهد که متغییر اول ما جای کلمه this را گرفته و مشابه آن عمل میکند.
    یعنی اگر تابع ما درون خود کلاس تعریف میشود این متغیر اولی همان this شی جاری میبود.
    (((در واقع تمام توابع عضو کلاس هم یک متغییر اولیه مخفی که همان this باشد را در ورودی دریافت میکنند.)))

    در مثال قبل اگر تابع ToInt32 ما داخل خود Class1 میبود مگر کدش شبیه این نمیشد:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    خوب شباهت دو کد را مشاهده کنید ... متغییر اولی در مثال static دقیقاً کار this را در توابع عضو انجام میدهد.

    ب) ولی از جنبه عملی نوشتن این this کاربرد مهمی دارد و در واقع خلاصه نویسی برای [System.Runtime.CompilerServices.ExtensionAttribute] است.
    در واقع کامپایلر [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] باز هم کد ما را کوچک میکند و خودش کد زیر را کامپایل نهایی به IL میکند.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    به عنوان نمونه اگر به طریقه تعریف Extension توابع در VB مراجعه کنید، متوجه میشوید که باید دقیق از attribute فوق استفاده کنید.
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
    موفق باشید.
    Last edited by _H2_; 15-08-2015 at 19:18. دليل: تصحیح یک خطای تایپی

  6. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


Thread Information

Users Browsing this Thread

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

User Tag List

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

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