PDA

View Full Version : سوال در مورد مفهوم واسط(interface)



abolfazlkaveh
دوشنبه 05 آذر 1386, 10:01 صبح
سلام.
خواستم بپرسم اصولا واسط ها چه کاربردی دارند؟. چه لزومی داره یه کلاس مشتق شده از کلاس مبنا از واسط کلاس مبنای خود استفاده کند در صورتی که واسط کلاس مبنا هیچ گونه پیاده سازی ندارد.

اَرژنگ
دوشنبه 05 آذر 1386, 10:04 صبح
http://barnamenevis.org/forum/showthread.php?t=7922

hassan razavi
دوشنبه 05 آذر 1386, 10:12 صبح
Interface یک قانون رو تعریف میکنه. قانونی که اگه عضو اون شده باید تک تک به مفاد اون عمل کنید. باید تک تک اعضای اونو پیاده سازی کنید.
فرض کنید Interface ی بنام ماشن داریم که شامل اعضایی بنام چرخ ، دنده ، چراغ و شاسی هست.
حالا می خواهید برای ماشین بنز و پژو یک کلاس بسازید. از اونجایی که تمام این کلاسها دارای اعضای یکسانی هستند که حتما همه اونها رو دارند و باید داشته باشند ، با پشتیبانی کردن این کلاسها از اینترفیس ماشین ، مطمئن میشیم که این اعضا حتما برای این کلاسها پیاده سازی میشه و همه دارای این اعضا یکسان میشند.
ولی چون ممکنه مشخصات چرخ ، دنده و چراغ هر کدام از این کلاسها متفاوت باشه ، می توان برای اعضا هر کدام از این کلاسها پیاده سازی متفاوتی داشت.

امیدوارم گویا باشه و دوستان عزیز دیگرمون بخصوص ارژنگ خان و PC2ir اطلاعات و اصلاحیات تکمیلی رو در اختیارمون قرار بدهند.

PC2st
دوشنبه 05 آذر 1386, 23:43 عصر
علاوه بر توضیحاتی که دوستان عزیز ارائه داشتند (چه در این تاپیک و چه در تاپیک قبلی)...

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 وجود نداشت و فقط میشد از تنها یک کلاس ارث بری کرد، دیگر چنین قابلیتی وجود نداشت!