الحاق

ساخت وبلاگ

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

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

توابع فرمت

برای اعلام یک تابع پسوند ، نام آن را با یک نوع گیرنده پیشوند کنید ، که به نوع گسترش یافته اشاره دارد. موارد زیر یک تابع مبادله را به mutablelist اضافه می کند:

این کلمه کلیدی در یک تابع پسوند با شی گیرنده مطابقت دارد (همان چیزی که قبل از نقطه منتقل می شود). اکنون ، می توانید چنین عملکردی را در مورد هر mutablelist فراخوانی کنید:

لیست Val = mutablelistof (1 ، 2 ، 3) list. swap (0 ، 2) // 'this' Inside 'swap ()' مقدار "لیست" را نگه می دارد

این عملکرد برای هر mutablelist معنی دارد و می توانید آن را عمومی کنید:

شما باید قبل از نام عملکرد ، پارامتر نوع عمومی را اعلام کنید تا آن را در بیان نوع گیرنده در دسترس قرار دهید. برای اطلاعات بیشتر در مورد Generics ، به عملکردهای عمومی مراجعه کنید.

پسوندها به صورت آماری حل می شوند

پسوندها در واقع کلاسهای گسترش یافته را تغییر نمی دهند. با تعریف یک پسوند ، شما اعضای جدید را در یک کلاس وارد نمی کنید ، و فقط عملکردهای جدید را با توجه به Dot Notion بر روی متغیرهای این نوع قابل تماس می گیرید.

توابع پسوند به صورت استاتیک ارسال می شوند ، به این معنی که آنها از نظر نوع گیرنده مجازی نیستند. یک تابع پسوند که خوانده می شود با نوع عبارتی که عملکرد آن فراخوانی می شود ، تعیین می شود ، نه با نوع نتیجه از ارزیابی آن بیان در زمان اجرا. مثلا:

این مثال شکل را چاپ می کند ، زیرا عملکرد پسوند نامیده شده فقط به نوع اعلام شده پارامتر S بستگی دارد ، که کلاس شکل است.

اگر یک کلاس دارای عملکرد عضو باشد و یک تابع پسوند تعریف شده باشد که دارای همان نوع گیرنده ، با همین نام است و برای آرگومان های داده شده قابل اجرا است ، عضو همیشه برنده می شود. مثلا:

این کد روش کلاس را چاپ می کند.

با این حال ، برای توابع پسوند برای اضافه بار کارکردهای عضو که دارای یک نام یکسان هستند اما امضای متفاوتی است ، کاملاً مناسب است:

گیرنده قابل برگشت

توجه داشته باشید که پسوندها را می توان با یک نوع گیرنده تهی تعریف کرد. این پسوندها را می توان بر روی یک متغیر شیء فراخوانی کرد، حتی اگر مقدار آن null باشد، و آنها می توانند این == null را در داخل بدنه بررسی کنند.

به این ترتیب، می توانید toString() را در Kotlin بدون بررسی null فراخوانی کنید، زیرا بررسی در داخل تابع افزونه انجام می شود:

ویژگی های پسوند

Kotlin از ویژگی های افزونه مانند توابع پشتیبانی می کند:

از آنجایی که برنامه‌های افزودنی در واقع اعضا را در کلاس‌ها وارد نمی‌کنند، هیچ راه کارآمدی برای داشتن یک فیلد پشتیبان یک ویژگی افزونه وجود ندارد. به همین دلیل است که اولیه کننده ها برای ویژگی های پسوند مجاز نیستند. رفتار آنها را فقط می توان با ارائه صریح دریافت کننده/ستتر تعریف کرد.

پسوندهای شی همراه

اگر یک کلاس دارای یک شی همراه تعریف شده است، می توانید توابع و ویژگی های پسوند را برای شی همراه تعریف کنید. درست مانند اعضای عادی شیء همراه، آنها را می توان تنها با استفاده از نام کلاس به عنوان واجد فراخوانی کرد:

دامنه الحاقات

در بیشتر موارد، برنامه‌های افزودنی را در سطح بالا، مستقیماً در زیر بسته‌ها تعریف می‌کنید:

برای استفاده از یک برنامه افزودنی خارج از بسته اعلام کننده آن، آن را در سایت تماس وارد کنید:

برای اطلاعات بیشتر به واردات مراجعه کنید.

اعلام برنامه های افزودنی به عنوان اعضا

می توانید پسوندهای یک کلاس را در کلاس دیگر اعلام کنید. در داخل چنین پسوندی، چندین گیرنده ضمنی وجود دارد - اشیایی که اعضای آنها بدون واجد شرایط قابل دسترسی هستند. نمونه ای از کلاسی که در آن پسوند اعلان می شود گیرنده اعزام و نمونه ای از نوع گیرنده متد توسعه یافته گیرنده توسعه نامیده می شود.

در صورت تضاد نام بین اعضای یک گیرنده اعزام و یک گیرنده داخلی، گیرنده داخلی اولویت دارد. برای مراجعه به عضو گیرنده اعزام می توانید از این نحو واجد شرایط استفاده کنید.

برنامه های افزودنی اعلام شده به عنوان اعضا می توانند به عنوان باز و در زیر کلاس ها لغو شوند. این بدان معنی است که ارسال چنین توابعی با توجه به نوع گیرنده اعزام مجازی است، اما با توجه به نوع گیرنده داخلی ثابت است.

نکته در مورد دید

برنامه‌های افزودنی از همان اصلاح‌کننده‌های دید استفاده می‌کنند که توابع معمولی که در همان محدوده اعلام شده‌اند، استفاده می‌کنند. مثلا:

پسوندی که در سطح بالای یک فایل اعلام شده است به سایر اعلان‌های سطح بالای خصوصی در همان فایل دسترسی دارد.

اگر یک برنامه افزودنی خارج از نوع گیرنده خود اعلام شود، نمی تواند به اعضای خصوصی یا محافظت شده گیرنده دسترسی داشته باشد.

تجارت با گزینه‌‌های باینری...
ما را در سایت تجارت با گزینه‌‌های باینری دنبال می کنید

برچسب : نویسنده : نازنین فراهانی بازدید : 51 تاريخ : سه شنبه 16 خرداد 1402 ساعت: 23:40