علاوه بر توضیحاتی که دوستان عزیز ارائه داشتند (چه در این تاپیک و چه در تاپیک قبلی)...
interface یک نوع داده (از نوع reference) است ولی بر خلاف دیگر انواع داده، از کلاس object مشتق نمیشود!
یک کلاس میتونه از چندین interface پیروی کنه و تنها از یک کلاس به ارث برسه. در سی# ارث بری چندگانه ی کلاسها معنا و مفهومی ندارد و interface ها جایگزین مناسبی به نظر میرسند.
interface ها گروهی از رفتارهای وابسته را توصیف میکنند که میتواند به هر کلاس یا ساختاری تعلق داشته باشد (منبع این جمله MSDN). یعنی هر کلاس با پیاده سازی (یا پیروی از) یک interface، رفتارهایی که توسط interface توصیف شده است را از خود بروز میدهد، بعبارتی، اگر کلاس Abc از اینترفیس IUia پیروی کند، کلاس Abc رفتارهایی که از آن انتظار داریم را بروز میدهد چون اینترفیس IUia را پیاده سازی کرده است. تقریبا چیزی شبیه به قانون که آقای hassan razavi گفتند.
خواستم بپرسم اصولا واسط ها چه کاربردی دارند؟
اینکه یک کلاس میتونه رفتارهای بخصوصی از خودش بروز بده تا در جاهای مختلف، کارایی لازم رو داشته باشه. مثلا اگر کلاس Abc اینترفیس Ia و Ib و Ic رو پیاده سازی کرده باشه، در اینصورت کلاس Abc میتونه بعنوان یک پارامتر به متدهای زیر ارسال بشه که این یکی از مهمترین مزایای اینترفیسهاست:
void Dooo(Ia item)
{
...
}
void Dooo2(Ib item)
{
...
}
void Dooo3(Ic item)
{
...
}
درست مثل روابط پدری-فرزندی در ارث بری چندگانه... مثلا در متد سوم، هر شیئی که اینترفیس Ic رو پیاده سازی کرده باشه، میتونه بعنوان یک پارامتر به آن متد ارسال بشه، میبینید که با وجود interface کارایی یک متد میتونه بالاتر باشه. حال اگر interface وجود نداشت و فقط میشد از تنها یک کلاس ارث بری کرد، دیگر چنین قابلیتی وجود نداشت!