PDA

View Full Version : گفتگو: كلاس پدر new مي شود يا خير؟



اوبالیت به بو
چهارشنبه 31 شهریور 1389, 00:36 صبح
با سلام

در ارث بري، وقتي من كلاس فرزند رو new مي كنم آيا خود به خود كلاس پدر هم new مي شود يا خير؟

برام خيلي مهم است بدونم كه آيا كلاس پدر حافظه اشغال مي كنه يا نه. به حافظه رم خيلي احتياج دارم.

شرح كاملتر:
كلاس فرزند من براي اجزاي متد هاش حتما حتما به يك كلاس ديگري احتياج داره. 2 راه دارم:


در تك تك متد ها هنگام اجرا از آن كلاس شي نمونه بسازم:



public class x
{
public int method1()
{
ClassBase obj = new ClassBase();
return (obj.Command());
}
public int Method2(int ID)
{
ClassBase obj = new ClassBase();
return (obj.Calculate(ID));
}
}


يا اينكه بيام از ارث بري استفاده كنم:



public class x : Classbase
{
public int method1()
{
return (Command());
}
public int Method2(int ID)
{
return (Calculate(ID));
}

}

متشكر

Reza_Yarahmadi
چهارشنبه 31 شهریور 1389, 07:55 صبح
در ارث بري، وقتي من كلاس فرزند رو new مي كنم آيا خود به خود كلاس پدر هم new مي شود يا خير؟
به منطق خودتون رجوع كنيد ‌، وقتي شما يك شي از كلاس فرزند درست ميكنيد و دسترسي به متدها و پراپرتيهاي كلاس پدر داريد يعني اينكه اونها هم ساخته ميشن و حافظه اشغال ميكنن.
البته در صورتي كه بخشي از كلاس وظيفه ثابتي داره و وابسته به اشيا ساخته شده نيست ميتونيد اونو به صورت static تعريف كنيد با اين كار تا زماني كه از اين بخشها استفاده نكنيد حافظه اي تخصيص داده نميشه.
اگر متدهاي فرزند بعضي از مواقع به كلاس پدر نياز دارند ميتونيد به همون روش اول استفاده كنيد با اين كار هرزمان كه نياز داشته باشه حافظه اشغال ميشه ولي مشكلي كه پيش مياد اينه كه از نظر زماني سربار زيادي داره.

ASKaffash
چهارشنبه 31 شهریور 1389, 09:02 صبح
سلام
وقتی یک شی از فرزند ایجاد می شود ایجاد شی پدر بی معنی است چون کلاس فرزند تعدادی member را از پدر به ارث برده ولی یک شی از کل member ها ایجاد می گردد و Modifier هر member نحوه دسترسی را در فرزند تعیین میکند اگر member ای در پدر private باشد به این معنی نیست که در شی نهائی وجود ندارد بلکه دسترسی به آن مقدور نیست پس در یک کلام فقط یک شی فرزند وجود دارد

اوبالیت به بو
چهارشنبه 31 شهریور 1389, 15:36 عصر
با سلام

اگر متدهاي فرزند بعضي از مواقع به كلاس پدر نياز دارند ميتونيد به همون روش اول استفاده كنيد با اين كار هرزمان كه نياز داشته باشه حافظه اشغال ميشه ولي مشكلي كه پيش مياد اينه كه از نظر زماني سربار زيادي داره.
هميشه و هميشه كلاس فرزند به كلاس پدر نيازمند هست. چون اگر اين كار صرت نگيره متدهاي كلاس فرزند من هيچ وقت اجزا نميشن.
پس نتيجه مي گيريم كه


اگر از كلاس فرزند يك object ساخته شود شي نمونه كلاس پدر نيز در حافظه ساخته مي شود.
خوبي روش ارث بري نسبت به روشي كه مدام در هر متد از كلاس پدر شي ساخته شود اين است كه اگر كلاس پدر در حافظه ساخته شد حجم كمتري را اشغال مي كند.

میلاد قاضی پور
چهارشنبه 31 شهریور 1389, 16:11 عصر
همه چیز بعد از کلمه کلیدی نیو اتفاق میفته . ممکنه شما کدتون رو اینجوری بنویسید :



Form f=new Form4();

در این صورت f تمام خصوصیت کلاس Form رو داراست اما با سازنده Form4 مقدار دهی شده . این یعنی چی ؟
یعنی اینکه Form4 ممکنه بسیاری از خصوصیات غیر ضروری رو نال کرده باشه تا فضا آزاد بشه . پس f سبکتر از Form اجرا میشه . در کل نتیجه میگیریم که با ادغام روشهایی که ذکر کردید میشه مقادیر زیادی در حافظه صرفه جویی کرد .