PDA

View Full Version : سوال: Multiple Inheritance یا وراثت چندگانه در C#.Net



محمد255
یک شنبه 20 فروردین 1391, 10:15 صبح
با سلام. من حقیقتا از C# چیزی نمیدونم. کمی به زبان های برنامه نویسی دیگه اشراف دارم ولی تازه در حال یادگیری C# هستم. به طور کلی میشه لطفا بگید که آیا C#.net از وراثت چندگانه پشتیبانی میکنه یا نه؟ اگر توضیح و دلیلش مثبت یا منفی بودن این قضیه رو هم بگید خیلی ممنون میشم. اصولا وراثت در C#.net به چه صورتی هست؟ با تشکر از شما.

hakim22
یک شنبه 20 فروردین 1391, 10:27 صبح
سلام
این خاصیت در .net پشتیبانی نمیشه. به همون دلایلی که مدیریت خطا و حافظه درچار مشکلات زیادی میشه. همانطور که java ازش پشتیبانی نمیکنه.
در این روش مدیریت حافظه ها و اشاره گرها بسیار پیچیده میشه که خودش ضریب اطمینان کد رو پایین میاره ، به این معنی که ممکن برنامه هنگ کنه و garbage collection که اصل اساسی شکل گیری دات نت برای مدیریت حافظه و جلوگیری از هنگ شدن سیستم هست بی معنی میشه.

به این مقاله رجوع کنید :
http://en.wikipedia.org/wiki/Diamond_problem

بجاش از قابلیت interface استفاده میشه.
در C#‎‎ شما نمیتوانید یک شی داشته باشید که وارث خصوصیتهای دو یا بیشتر شی باشه. اما میتوانید با Interface ها خصوصیات چند شی را در یک شی جدید جای دهید. اما باید برای هر خصوصیت کد نویسی مجدد انجام دهید.

محمد255
یک شنبه 20 فروردین 1391, 10:31 صبح
با تشکر. امکانش هست به طور خیلی خلاصه بفرمایید که interface در C#.net چیست و چگونه به کار میرود؟ از شما متشکرم.

رافعی مهدی
یک شنبه 20 فروردین 1391, 10:34 صبح
سلام
چون به سایر زبانهایی که به اونها اشراف دارید اشاره ای نکردید، نمیتونم #C رو با اونها مقایسه کنم. ولی به طور کلی اگر با زبانهای تحت Net. آشنا هستید، باید گفت که CLR اصولاً وراثت چندگانه رو از کلاسها پشتیبانی نمیکنه، چیزی که پشتیبانی میشه استفاده از چند Interface به صورت همزمان هست.

مطالب بسیار مفیدی رو در اینجا (http://stackoverflow.com/questions/178333/multiple-inheritance-in-c-sharp) و اینجا (http://blogs.msdn.com/b/csharpfaq/archive/2004/03/07/why-doesn-t-c-support-multiple-inheritance.aspx) میتونید پیدا کنید.

محمد255
یک شنبه 20 فروردین 1391, 10:49 صبح
با تشکر. من دلایل رو تا حدودی متوجه شدم. فقط امکانش هست درباره Interface که چیست و چگونه کار میکند خیلی خلاصه توضیحی دهید؟ از شما ممنونم.

C#.net
یک شنبه 20 فروردین 1391, 11:08 صبح
با تشکر. من دلایل رو تا حدودی متوجه شدم. فقط امکانش هست درباره Interface که چیست و چگونه کار میکند خیلی خلاصه توضیحی دهید؟ از شما ممنونم.

اینترفیس ها برای کپسوله سازی یک رفتار کاربرد دارند
مثلا در مدل سازی جانداران شما اینترفیسی تعریف می کنید به نام IVegetarians گیاهخواران، این اینترفیس رو مثلا حیواناتی مثل گاو، بز و مثلا غاز پیاده سازی می کنند حالا این اینترفیس می تونه یه پراپرتی داشته باشه از گیاهان مورد علاقه اینها

یا مثلا یه ماشین حساب ریاضی می سازید شامل کلاس های Add, Divide، اینترفیس IResultable به شکل زیر قابل تعریف هست:



public interface IResultable
{
double GetResult(int operand1, int operand2);
}
public class Add : IResultable
{
public double GetResult(int operand1, int operand2)
{
return operand1 + operand2;
}
}