PDA

View Full Version : سوال: ساخت intance از کلاس ها ؟تفاوت؟



Modifier
چهارشنبه 05 خرداد 1389, 14:21 عصر
سلام

برای ساخت Instance از یک کلا مانند DataSet میتوان اینگونه عمل کرد :


MyClass
{
DataSet DS;

MyMethode
{
DS = new DataSet();
DS.Dispose();
}

MyMethode2
{
DS = new DataSet();
DS.Dispose();
}
}

و به گونه ای دیگر :


MyClass
{
DataSet DS = new DataSet();

MyMethode
{
[using DS]
[Dispose DS]
}
}

این دو تا در ساختار کلاس چه تفاوتی داره؟
و همینطور در گرفتن حافظه ؟

با تشکر

gwbasic
چهارشنبه 05 خرداد 1389, 16:34 عصر
در اولی هنگام ایجاد نمونه از کلاس شئی از DataSet ایجاد نمی شود بلکه هنگام استفاده از متدهای آن DataSet ایجاد می شود و البته با هر بار صدا زدن متد یه شی جدید از DataSet ایجاد می شود پس اشیاء Garbage زیادی تولید می کند
ولی در دومی هنگام ایجاد نمونه از کلاس شئ DataSet نیز ایجاد می شود و متد ها نیز از آن استفاده می کنند

Modifier
پنج شنبه 06 خرداد 1389, 14:45 عصر
در اولی هنگام ایجاد نمونه از کلاس شئی از DataSet ایجاد نمی شود بلکه هنگام استفاده از متدهای آن DataSet ایجاد می شود و البته با هر بار صدا زدن متد یه شی جدید از DataSet ایجاد می شود پس اشیاء Garbage زیادی تولید می کند
ولی در دومی هنگام ایجاد نمونه از کلاس شئ DataSet نیز ایجاد می شود و متد ها نیز از آن استفاده می کنند

کد اولی با کد زیر چه تفاوتی داره :



MyClass
{
MyMethode()
{
DataSet DS = new DataSet();
}

MyMethode2()
{
DataSet DS = new DataSet();
}
}






در هر دو هنگام صدا زدن کلاس DS تولید میشه ...

تفاوتش چیه ؟

با تشکر

Saeed.Masoumi
پنج شنبه 06 خرداد 1389, 15:11 عصر
سلام
حوضه ی ( :متفکر:) کاریشون متفاوته یعنی هر عملی که در یکی از متد ها انجام بشه آثار آن تنها توی همون حوضه باقی می مونه
این مثال رو ببین:


DataSet ds;
private void M1()
{
ds = new DataSet("DS1");
MessageBox.Show(ds.DataSetName);
}

private void M2()
{
ds = new DataSet();
MessageBox.Show(ds.DataSetName);
}


حتی اگر اول بیایم و تابع M1 رو صدا بزنیم باز هم در هنگام صدا زدن تابع M2 میسج باکس عبارت NewDataset را نمایش می دهد.