PDA

View Full Version : سوال در رابطه با اینترفیس



Xcalivorse
چهارشنبه 02 مرداد 1387, 17:14 عصر
اگر در تعریف کلاسمون یک اینتر فیس رو برای ارث بری معرفی کنیم آیا در این حالت می بایستی تمامی متدها و توابع اینترفیس مذکور را در کلاس تعریف کنیم ؟

sinpin
چهارشنبه 02 مرداد 1387, 20:34 عصر
اگر در تعریف کلاسمون یک اینتر فیس رو برای ارث بری معرفی کنیم آیا در این حالت می بایستی تمامی متدها و توابع اینترفیس مذکور را در کلاس تعریف کنیم ؟

بله تمام اعضاي اينترفيس بايد پياده سازي شوند. ‌{بهتره بگيم پياده سازي كردن اينترفيس تا ارث بردن}

نهمنهح
پنج شنبه 03 مرداد 1387, 12:55 عصر
بله باید پیاده سازی شوند چون Interface مثل یه قرارداد میمونه وقتی قکلاسی از این Interface ارث ببره باید به کل قرارداد عمل کند.

اَرژنگ
پنج شنبه 03 مرداد 1387, 18:13 عصر
بله باید پیاده سازی شوند چون Interface مثل یه قرارداد میمونه وقتی قکلاسی از این Interface ارث ببره باید به کل قرارداد عمل کند.
همانطوری که گفته شد، ارث بری در مورد اینترفیس صادق نیست،
کمبود زبانی باعث شده که ارث بری را برایه مفاهیمی که برایشان در نظر گرفته نشده را استفاده کنند. در کتابها این اشتباه بارها تکرار شده، در جاوا این مشکل وجود ندارد چونکه دو نوع کلمه کلیدی استفاده میشه : inherits , implements
inherits
را برایه ارث بری کلاسی (کلاسیک) استفاده میکنند
implements
را برایه اینکه نشان بدند کلاس اینترفیس را پیاده میکند استفاده میکنند.

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

Xcalivorse
پنج شنبه 03 مرداد 1387, 20:19 عصر
خوب سوال اینکه به چه دردی میخوره. خوب آدم به جای این کار تمامی توابعی رو که می خواد تو کلاسش مینویسه. دیگه مقید کردن معنی نمیده ؟

sinpin
پنج شنبه 03 مرداد 1387, 20:44 عصر
براي مثال، گاهي پيش مياد كه ميخواين با موجوداتي كار كنيد كه هيچ شناختي از اونها نداريدو تنها چيزي كه ازشون ميدونيد اينه كه اينترفيس A رو پياده سازي كردند و ...

Xcalivorse
پنج شنبه 03 مرداد 1387, 21:02 عصر
مگه میشه از کلاسهای دات نت فهمید از چه اینترفیسی استفاده کردند ؟

علیرضا مداح
پنج شنبه 03 مرداد 1387, 21:34 عصر
سلام دوست عزیز ،
میتوانید از کلیدواژه is برای چک کردن اینکه آیا کلاس یک اینترفیس را پیاده سازی(Implement) میکند ، استفاده نمایید - توجه نمایید برای اینترفیس از واژه پیاده سازی استفاده میگردد -
یک مثال ساده :


private void Form1_Load(object sender, EventArgs e)
{
if (this is IDisposable)
MessageBox.Show("Form Object Implements IDisposable Interface");
}


همچنین برای اینکه لیست اینترفیس هایی که یک کلاس پیاده سازی مینماید را بدست آورید میتوانید از Reflection استفاده نمایید ، به طور مثال :


Type[] interfaces = System.Reflection.Assembly.GetExecutingAssembly(). GetType("ObjectFullName").GetInterfaces();