۱۴۰۴/۰۷/۰۹
انواع داده در سی شارپ
۱. Value Type vs Reference Type
Value Type
- مثالها:
int,double,bool,struct,enum - ویژگیها:
- ذخیره در Stack: حافظه سریع و موقت.
- کپی هنگام انتساب: وقتی یک value type به متغیر دیگری داده میشود، یک کپی مستقل ساخته میشود. تغییر در یکی دیگری را تحت تأثیر قرار نمیدهد.
مثال:
int a = 10;
int b = a; // مقدار a کپی شد
b = 20;
Console.WriteLine(a); // خروجی: 10
همانطور که میبینی، تغییر
bتاثیری رویaندارد.
Reference Type
- مثالها:
class,string,object,array - ویژگیها:
- ذخیره در Heap: حافظه بزرگ و مدیریت شده توسط GC.
- انتساب، مرجع را کپی میکند: وقتی یک reference type به متغیر دیگر داده میشود، هر دو متغیر به همان شیء روی heap اشاره میکنند. تغییر در یکی، روی دیگری اثر میگذارد.
مثال:
class Person
{
public string Name;
}
Person p1 = new Person { Name = "Ali" };
Person p2 = p1; // مرجع کپی شد
p2.Name = "Reza";
Console.WriteLine(p1.Name); // خروجی: Reza
توجه کن، تغییر در
p2رویp1هم تأثیر گذاشت، چون هر دو به یک شیء اشاره دارند.
Boxing و Unboxing
- Boxing → تبدیل یک value type به reference type
- Unboxing → تبدیل یک reference type که در واقع یک value type را نگه داشته، دوباره به value type تبدیل میکند.
مثال:
int x = 123; // value type
object o = x; // boxing -> x به object تبدیل شد و در heap قرار گرفت
int y = (int)o; // unboxing -> دوباره به int تبدیل شد
هزینه Box/Unbox نسبت به استفاده مستقیم از value type بیشتر است، بنابراین در performance-sensitive code بهتر است از آن پرهیز شود یا از Generics استفاده کنیم.
Nullable types
- مسئله: Value type مثل
intنمیتواند به طور پیشفرضnullداشته باشد. - راه حل: از
Nullable<T>یا شکل کوتاه آنT?استفاده میکنیم.
مثال:
int? age = null;
if (age.HasValue)
{
Console.WriteLine(age.Value);
}
else
{
Console.WriteLine("Age not provided"); // خروجی
}
HasValue→ بررسی میکند که مقدارnullنیست.Value→ مقدار واقعی را برمیگرداند، اگرnullباشد استثنا میدهد.
✅ نکته مهم برای آزمون:
- سوالهای کلاسیک:
- فرق stack و heap
- چه زمانی یک تغییر در متغیر بر دیگری تأثیر میگذارد (copy vs reference)
- Nullable types و دسترسی به
ValueوHasValue - مثالهای ساده Boxing/Unboxing
Accept Cookies
[your-shortcode]