View Full Version : سوال: مشکل در مفهوم لیستی از Interface ها
a.ameri
چهارشنبه 05 تیر 1392, 13:16 عصر
سلام
با توجه به تیکه کد زیر
public Interface X
{ void Y(); }
public class A : X
{
public void Y()
{
//code
}
}
public class B : X
{
public void Y()
{
}
public void d()
{ }
}
List<X> LA = new List<X>();
A a = new A();
B b = new B();
LA.Add(a);
LA.Add(b);
من یه لیست درست کردم از اینترفسم ولی چرا میتونم کلاسم رو به لیستم اضافه کنم ؟
ممنون میشم راهنمایی کنید
a.ameri
پنج شنبه 06 تیر 1392, 08:51 صبح
پس چی شد ؟
wolf_majid
پنج شنبه 06 تیر 1392, 10:05 صبح
سوالتون خیلی گنگه
مشکلتون اینه چطور LA تونست a,b رو add کنه ؟
بخاطر اینکه a,b موافقت کرده اند که حتما" اعضای x را پیاده سازی کنند پس زمانی که کلاس های a,b به اینترفیس x نسبت داده میشند تمامی اعضای x رو دارند و این نسبت دادن مشکلی پیش نمیاره
a.ameri
پنج شنبه 06 تیر 1392, 10:26 صبح
مرسی از راهنماییتون
بله مشکلم همینه
درسته که کلاس ها متعهد شدند که ایترفیس را پیاده کنند ولی کلاس B که یک متد دیگه داره چی ؟
wolf_majid
پنج شنبه 06 تیر 1392, 11:27 صبح
اصلا" مهم نیست
مهم اینه که تمامی اعضای x رو دارند
به این عمل میگن cast (به عبارتی به کلاس های a,b به عنوان x داره نگاه میکنه)
a.ameri
پنج شنبه 06 تیر 1392, 11:33 صبح
پس با اینکار متد d از کلاس B بعد از قرار گرفتن در لیست در دسترس (از بین میره) نیست
wolf_majid
پنج شنبه 06 تیر 1392, 11:40 صبح
جالبی Casting به همینه که از بین نمیره
همونطور که گفتم فقط زاویه دید عوض میشه و اگر شیء به حالت اولش برگرده تمام اطلاعاتش هست
a.ameri
پنج شنبه 06 تیر 1392, 11:43 صبح
مرسی برام خیلی مفید بود
wolf_majid
پنج شنبه 06 تیر 1392, 11:45 صبح
این مثال رو ببینید
public interface X { void Y(); }
public class A : X
{
public void Y()
{
MessageBox.Show("A");
}
}
public class B : X
{
public void Y()
{
MessageBox.Show("B");
}
public void d()
{
MessageBox.Show("Its D metod");
}
}
List<X> LA = new List<X>();
A a = new A();
B b = new B();
LA.Add(a);
LA.Add(b);
LA[1].Y();
B c = (B) LA[1];
c.d();
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.