PDA

View Full Version : مشکل در مقدار دهی یک شی



HAIdle
دوشنبه 22 مرداد 1386, 17:57 عصر
ا سلام
کلاس زیر را در نظر بگیرید:


class test
{
public string ticket;
public int num;
public test(string str, int i)
{
ticket = str;
num = i;
}

حال کد زیر را مشاهده نمایید:


test t1 = new test("t1", 1);
test t2 = new test("t2", 2);
t2 = t1;
t1.ticket = "salam";
t1.num = 110;

با توجه به کد بالا انتظار داریم که t2.ticket برابر t1 و t2.num برابر 1 باشد. ولی در کمال تعجب می بینیم که مقادیر جدید t1 یعنی "salam" و

110 در t2 هم وارد شده است. علت آن چیست؟

hdv212
دوشنبه 22 مرداد 1386, 19:55 عصر
علت آن است که در سی شارپ، کلاسها به عنوان انواع ارجاعی محسوب میشن، یعنی زمانی که t2=t1 رو ست میکنی، به جای اینکه در حافظه دو مقدار وجود داشته باشه، یه مقدار وجود داره، در حقیقت آدرس اون مقدار در آبجکت های t1 , t2 ذخیره میشه، و وقتی مقدار t1 رو مساوی مقدار t2 قرار میدی و بعد خصیصه های t1 رو تغییر میدی، t2 هم تغییر میکنه چون اونم همون آدرسی رو در خودش داره که در t1 هست(هر دو به یک مقدار در حافظه اشاره میکنند).

mehdi.mousavi
دوشنبه 22 مرداد 1386, 21:08 عصر
ا سلام
با توجه به کد بالا انتظار داریم که t2.ticket برابر t1 و t2.num برابر 1 باشد. ولی در کمال تعجب می بینیم که مقادیر جدید t1 یعنی "salam" و 110 در t2 هم وارد شده است. علت آن چیست؟


سلام.
لطفا به این پست رجوع کنید. (http://barnamenevis.org/forum/showpost.php?p=370112&postcount=3)