PDA

View Full Version : سوال: متغییر Reference Type و Value Type چیست؟



FingerPrint
جمعه 07 تیر 1392, 10:29 صبح
مهندسین عزیز یه سئوال بنیادین!

1) اینکه دقیقا" Reference Type و Value Type به چه نوع متغییرهایی گفته می شود؟ دلیل نامگذاری
2) متغییرهای زیر مجموعه این دو شاخه کدام هستند؟
3) چه زمانی ، از کدام استفاده می کنیم؟

gwbasic
جمعه 07 تیر 1392, 12:44 عصر
به لینک آموزش سی شارپ که در امضام هست مراجعه کنید. در این مورد هم در PowerPoint و PDF ارائه شده، توضیحات کافی موجود هست

مهرداد صفا
جمعه 07 تیر 1392, 19:13 عصر
با سلام.
1- referense type متغیرهایی هستند که (شبیه به اشاره گرها) آدرس شی مربوطه را نگهداری می کنند و نه مقداری واقعی آن را. به عملکرد نمونه ای از آنها دقت کنید:

Form A, B;
A = new Form() { Width = 800 };
B = A;
MessageBox.Show(B.Width.ToString());//800
A.Width=200;
MessageBox.Show(B.Width.ToString());//200

در حالیکه value types مقدار شی را نگهداری می کنند:

Point a, b;
a=new Point(){X=10};
b = a;
MessageBox.Show(b.X.ToString());//10
a.X = 5;
MessageBox.Show(b.X.ToString());//10


2- عمدتا متغیرهایی که نمونه هایی از یک کلاس را نگهداری میکنند referense type هستند و متغیرهایی که یک structure هستند value type قلمداد می شوند.

3- مقادیر structure ها یا همان value types در stack نگهداری میشوند و عمدتا برای اشیایی با حجم کم و عمر کوتاه که نیازمند به دسترسی سریعترند مناسبترند در حالیکه referense type در heap نگهداری می شوند و برای اکثر اشیا حجیم و اشیایی که ماندگاری بیشتری در حافظه دارند مناسبترند. از طرفی (به عنوان مثالی از ضرورت کاربرد کلاس) فرض کنید شی پدر و شی مادر را که دارای خصوصیتی مشترک به نام فرزند هستند که طبیعاتا در صورت تغییر این خصوصیت در هر یک از اشیا فرضی پدر و مادر، خصوصیت فرزند در شی دیگر هم تغییر می کند. در این حالت خصوصیت فرزند می تواند دو referense type باشد که به یک مقدار اشاره می کند.