مشاهده نسخه کامل
: چرا باید Extension Method ها استاتیک باشند؟
سلام و عرض وقت بخیر خدمت اساتید :n40:
چرا باید هم کلاس و هم متد اجبارا Static باشند؟
کلمه کلیدی this دقیقا به چه منظور است؟
:n41:
........................... .
.............................. .
H.E.R.O.E.S
29-07-2015, 10:12
کلمه کلیدی this برای اشاره به فرم جاری و توابع آن استفاده میشود...
سلام
چرا باید هم کلاس و هم متد اجبارا Static باشند؟
از نظر تئوری متد باید static باشد ولی اجبار static بودن کلاس نوعی محکم کاری و تمیز کاری است که کارها مخلوط نشوند.
اتفاقاً لغو اجبار static بودن کلاس جزء مواردی است که مدت هااست برخی پیشنهاد کرده اند ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) و رای های مثبت و منفی هم گرفته ... که مهم در جواب شما آن است که از نظر تئوری میشود کلاس static نباشد ولی بحث مزیت و ایراد آن خارج از حوصله من و شماست و ارزشی هم ندارد ...
ولی static بودن متد واجب است، چون تابع باید بدون نیاز به نمونه سازی کلاس و بطور مستقیم قابل استفاده باشد.
اجازه دهید با مثالی مطلب را دنبال کنیم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در واقع خط int a یک جور کوتاه نویسی خط int b است، کامپایلر فقط برای راحتی ما خط int a را میپذیرد و جای آن دقیقا خطی مشابه int b قرار میدهد.
Extension فقط یک جور خلاصه نویسی در استفاده از توابع static است.
کلمه کلیدی this دقیقا به چه منظور است؟
کلمه this در اینجا دو جنبه دارد ...
الف) از جنبه شهودی نشان میدهد که متغییر اول ما جای کلمه this را گرفته و مشابه آن عمل میکند.
یعنی اگر تابع ما درون خود کلاس تعریف میشود این متغیر اولی همان this شی جاری میبود.
(((در واقع تمام توابع عضو کلاس هم یک متغییر اولیه مخفی که همان this باشد را در ورودی دریافت میکنند.)))
در مثال قبل اگر تابع ToInt32 ما داخل خود Class1 میبود مگر کدش شبیه این نمیشد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خوب شباهت دو کد را مشاهده کنید ... متغییر اولی در مثال static دقیقاً کار this را در توابع عضو انجام میدهد.
ب) ولی از جنبه عملی نوشتن این this کاربرد مهمی دارد و در واقع خلاصه نویسی برای [System.Runtime.CompilerServices.ExtensionAttribute] است.
در واقع کامپایلر #C ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) باز هم کد ما را کوچک میکند و خودش کد زیر را کامپایل نهایی به IL میکند.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به عنوان نمونه اگر به طریقه تعریف Extension توابع در VB مراجعه کنید، متوجه میشوید که باید دقیق از attribute فوق استفاده کنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
موفق باشید.
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.