#csharp_for_beginners
تعریف و کاربرد
کلمه کلیدی interface برای تعریف یک قرارداد به کار میرود. این قرارداد مجموعهای از امضاهای اعضا را مشخص میکند که میتواند شامل متدها، ویژگیها، ایندکسرها، رویدادها و غیره باشد.
یک interface میتواند اعضایی بدون پیادهسازی یا اعضایی با پیادهسازی پیشفرض داشته باشد. همچنین امکان تعریف اعضای static نیز وجود دارد.
از نسخه سیشارپ ۱۱ به بعد interface میتواند اعضای static abstract یا static virtual داشته باشد. این موضوع زمانی مفید است که بخواهیم در یک نوع عمومی (generic) رفتار مشخصی برای تمام انواع پیادهساز اجباری کنیم. به عنوان مثال در کتابخانه داتنت انواع عددی مختلف واسط INumber را پیاده میکنند تا عملیات ریاضی مشترک میان آنها تضمین شود.
قوانین دسترسی و سطح تعریف
یک interface سطح بالا (در فضای نام) میتواند internal یا public باشد. پیشفرض internal است.
اگر interface به صورت تو در تو داخل یک نوع دیگر تعریف شود میتوان از هر نوع اصلاحکننده دسترسی استفاده کرد.
اعضای interface که بدون پیادهسازی هستند اصلاحکننده دسترسی ندارند. اما اگر برای آن عضو پیادهسازی پیشفرض بنویسیم میتوان دسترسی آن را مشخص کرد.
انواع اعضا در interface
یک interface میتواند شامل موارد زیر باشد:
-متدها
-ویژگیها
-ایندکسرها
-رویدادها
-ثابتها
-عملگرها
-انواع تو در تو
-سازنده ایستا
پیادهسازی
یک interface میتواند از یک یا چند interface دیگر مشتق شود. هر نوعی که interface مشتق را پیاده کند باید تمام اعضای interfaceهای پایه و مشتق را پیادهسازی کند.
کلاس یا ساختار میتواند اعضای interface را به صورت ضمنی یا به صورت صریح (explicit implementation) پیاده کند.
اگر یک عضو interface پیادهسازی پیشفرض داشته باشد معمولاً تنها از طریق نمونهای از نوع interface قابل دسترسی است نه مستقیماً از طریق کلاس پیادهساز.
مثالها
تعریف یک قرارداد ساده
interface ISampleInterface
{
void SampleMethod();
}
class ImplementationClass : ISampleInterface
{
void ISampleInterface.SampleMethod()
{
// پیادهسازی متد
}
}
تعریف ویژگیها و متدها
interface IPoint
{
int X { get; set; }
int Y { get; set; }
double Distance { get; }
}
class Point : IPoint
{
public int X { get; set; }
public int Y { get; set; }
public double Distance => Math.Sqrt(X * X + Y * Y);
}
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______