PDA

View Full Version : سوال در مورد تغییر مقدار یک متغیر



pedram.11
دوشنبه 16 بهمن 1391, 17:00 عصر
سلام، ممکنه سوالم کمی ابتدایی باشه
int a = 1;
int b = a;
b= 2;

اینجا وقتی b تغییر کنه a هم تغییر میکنه که البته بایدم تغییر کنه اما چه راهی هست که با تغییر متغیر دومی اولی تغییر نکنه؟ این یه مثال بود و من نیاز دارم دو تا آبجکت رو برابر قرار بدم و فقط یکی از متغیر های آبجکت دومی رو تغیی بدم، اما آبجکت اولی هم همراه اون تغییر میکنه

sara_aryanfar
دوشنبه 16 بهمن 1391, 17:13 عصر
خیر دوست من مقدار a تغییری نمی کنه شما پس از انتصاب مقدار a رو وارد b کردین و بعد دوباره به b مقدار 2 رو دادین a مقدارش همون 1 مونده در کل وقتی متغیری رو به متغیر دوم منتصب می کنید هر دوتا هم مقدار میشن

daneshjo90
دوشنبه 16 بهمن 1391, 17:14 عصر
با سلام

والا نمیدونم منظورت چیه ولی تا جایی که میدونم هرکجا یه متغیری رو که اینجا تعریف کردی عوض کنی اونیکی هم عوض میشه

ولی بازم اساتید نظراتشون رو اعلام کنن

موفق باشی

pedram.11
دوشنبه 16 بهمن 1391, 17:26 عصر
من هم اینو قبول دارم اما در مورد آبجکت که میتونه چندین متغیر داشته باشه، ساده بگم اگه بخوام یه کپی از این آبجکت داشته باشم و اگه بخوام توی آبجکت کپی تنها یه متغیر تغییر کنه درصورتی که توی آبجکت اصلی تغییری ایجاد نشه چه باید کرد؟
میشه با تعریف آبجکت جدید و برابر قرار دادن همه متغرهای آبجکت به هم به جز متغیر مورد نظر اینکارو کرد اما هدف من راه بهتر برای اینکار هست که گفتم شاید تعریفی داشته باشه که بنده ندونم، اگه هم همچین چیزی وجود داشت از ما دریغ نکنید، ممنون

the king
دوشنبه 16 بهمن 1391, 18:07 عصر
چه این باشه...

int a = 1;
int b = a;
b = 2;


و چه این باشه...

object a = 1;
object b = a;
b = 2;


فرقی نمی کنه، b قبلا مقداری رو داشته که a داشت و در ادامه مقدار جدید 2 رو داره، این اتفاق ربطی به a نداره و تاثیری روی a نخواهد گذاشت.

pedram.11
دوشنبه 16 بهمن 1391, 18:23 عصر
ببخشید حق با شماس، این نمونه کد رو توجه بفرمائید
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
m = new myclass();
m.a = 1;
m.b = 2;
}
myclass m;
private void button1_Click(object sender, EventArgs e)
{
myclass m2 = m;
m2.a = 3;
MessageBox.Show("m.a: " + m.a);
MessageBox.Show("m2.a: " + m2.a);
}
}
public class myclass
{
public int a, b;
}
با توجه به این کد باید چکار کرد

the king
دوشنبه 16 بهمن 1391, 18:40 عصر
ببخشید حق با شماس، این نمونه کد رو توجه بفرمائید
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
m = new myclass();
m.a = 1;
m.b = 2;
}
myclass m;
private void button1_Click(object sender, EventArgs e)
{
myclass m2 = m;
m2.a = 3;
MessageBox.Show("m.a: " + m.a);
MessageBox.Show("m2.a: " + m2.a);
}
}
public class myclass
{
public int a, b;
}
با توجه به این کد باید چکار کرد

روش اول : بجای class یک struct بسازید :

public struct myclass
{
public int a, b;
}


روش دوم : موقعی که نمی خواهید شیء قبلی تغییر کنه، Clone اش کنید :

myclass m;

private void button1_Click(object sender, EventArgs e)
{
myclass m2 = m.Clone();
m2.a = 3;
MessageBox.Show("m.a: " + m.a);
MessageBox.Show("m2.a: " + m2.a);
}

public class myclass
{
public int a, b;

public myclass Clone()
{
myclass c = new myclass();
c.a = a;
c.b = b;
return c;
}
}


البته اصولی اش اینه که از ICloneable در ساختار کلاس استفاده بشه ولی خب، نیازی نیست.