سلام و عرض وقت بخیر خدمت اساتید
چرا باید هم کلاس و هم متد اجبارا Static باشند؟
کلمه کلیدی this دقیقا به چه منظور است؟
![]()
سلام و عرض وقت بخیر خدمت اساتید
چرا باید هم کلاس و هم متد اجبارا Static باشند؟
کلمه کلیدی this دقیقا به چه منظور است؟
![]()
........................... .
Last edited by B-Prot; 25-07-2015 at 18:24.
.............................. .
Last edited by B-Prot; 25-07-2015 at 18:25.
کلمه کلیدی this برای اشاره به فرم جاری و توابع آن استفاده میشود...
سلام
از نظر تئوری متد باید static باشد ولی اجبار static بودن کلاس نوعی محکم کاری و تمیز کاری است که کارها مخلوط نشوند.نوشته شده توسط Life24
اتفاقاً لغو اجبار static بودن کلاس جزء مواردی است که مدت هااست [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] و رای های مثبت و منفی هم گرفته ... که مهم در جواب شما آن است که از نظر تئوری میشود کلاس static نباشد ولی بحث مزیت و ایراد آن خارج از حوصله من و شماست و ارزشی هم ندارد ...
ولی static بودن متد واجب است، چون تابع باید بدون نیاز به نمونه سازی کلاس و بطور مستقیم قابل استفاده باشد.
اجازه دهید با مثالی مطلب را دنبال کنیم:
در واقع خط int a یک جور کوتاه نویسی خط int b است، کامپایلر فقط برای راحتی ما خط int a را میپذیرد و جای آن دقیقا خطی مشابه int b قرار میدهد.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
Extension فقط یک جور خلاصه نویسی در استفاده از توابع static است.
کلمه this در اینجا دو جنبه دارد ...نوشته شده توسط Life24
الف) از جنبه شهودی نشان میدهد که متغییر اول ما جای کلمه 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. دليل: تصحیح یک خطای تایپی
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)