PDA

View Full Version : سوال: Interface در #C همان کلاسی با متد های انتزاعی در جاواست ؟



MSN_Issue
یک شنبه 17 مرداد 1389, 20:01 عصر
سلام به همه
دوستان میخواستم ببینم که این InterFace توی C# کار همون کلاسی رو میکنه که تمام متدهاش انتزاعی باشند ؟!

FastCode
یک شنبه 17 مرداد 1389, 20:13 عصر
من نمیدونم انتزاعی چیه.ولی اگر منظورتون abstract درسته.

MSN_Issue
یک شنبه 17 مرداد 1389, 20:20 عصر
من نمیدونم انتزاعی چیه.ولی اگر منظورتون abstract درسته.
بله منظورم همون abstract هست .
اما من خیلی از کاربرد Interface شنیدم ، یعنی واقعا کاربرد( یا نکته ی انحرافی :لبخند:) دیگه ای جز این نداره ؟!

FastCode
یک شنبه 17 مرداد 1389, 20:47 عصر
بله منظورم همون abstract هست .
اما من خیلی از کاربرد Interface شنیدم ، یعنی واقعا کاربرد( یا نکته ی انحرافی :لبخند:) دیگه ای جز این نداره ؟!
نه.
البته ی سری امکانات مثل multi inheritance هم داره.

meysam_pro
یک شنبه 17 مرداد 1389, 22:32 عصر
سلام به همه
دوستان میخواستم ببینم که این InterFace توی C#‎ کار همون کلاسی رو میکنه که تمام متدهاش انتزاعی باشند ؟!

مفهوم Interface در #C (http://msdn.microsoft.com/en-us/library/87d83y5b%28VS.80%29.aspx)و JAVA (http://download.oracle.com/javase/tutorial/java/concepts/interface.html)یکسان است.
Interface و Abstract کردن یک نوع یا متد ، از لحاظ مفهومی و کاربرد تفاوت دارن!

vcldeveloper
یک شنبه 17 مرداد 1389, 23:41 عصر
البته ی سری امکانات مثل multi inheritance هم داره. شما از interface چیزی ارث نمی برید، بلکه یک اینترفیس رو implement (پیاده سازی) می کنید. پیاده سازی interface در یک کلاس با ارث بری فرق میکنه. اصلا برای توجه به همین تفاوت، در جاوا Syntax ارث بری با Syntax مربوط به پیاده سازی Interface فرق میکنه:


class MyClass extends MyBaseClass

class MyClass implements MyInterface

دوستان میخواستم ببینم که این InterFace توی C#‎‎‎ کار همون کلاسی رو میکنه که تمام متدهاش انتزاعی باشند ؟! همانطور که در پست شماره 5 تاپیک اشاره شد، هم در C#‎‎ و هم در جاوا Interface وجود داره. Interfaceها شباهت هایی با کلاس های Abstract از نظر کاربرد دارند، ولی کاربردشان دقیقا مثل هم نیست. خلاصه ایی از کاربردهای متفاوت شان را می تونید در لینک زیر ببینید:
http://mindprod.com/jgloss/interfacevsabstract.html

FastCode
دوشنبه 18 مرداد 1389, 23:10 عصر
منظور من از ارثبری این بود:


interface I1
{
void Call1();
}
interface I2
{
void Call2();
}
interface I3 : I1, I2
{
void Call3();
}
class Class1:I3
{
void Call1(){}
void Call2(){}
void Call3(){}
}

vcldeveloper
سه شنبه 19 مرداد 1389, 04:17 صبح
منظور من از ارثبری این بود
در بالا توضیح دادم که این کار اسمش ارث بری نیست؛ بلکه پیاده سازی یک یا چند اینترفیس توسط اون کلاس هست. در واقع اون کلاس چیزی از اون اینترفیس ها به ارث نبرده، فقط تضمین کرده که اعمال تعریف شده در اون اینترفیس ها را پیاده سازی کنه.

shask00l
سه شنبه 19 مرداد 1389, 11:27 صبح
در ادامه صحبت دوستان عرض شود که ......

بدلیل یکسان بودن syntax برای ارث بری و پیاده سازی کلاس و interface در #c خیلی از دوستان این دوتا رو اشتباه میگیرن . بنظر من interface مفهوم کلی تری نسبت به کلاس داره .