سلام
ببیند اتفاقا new مخصوص متغیر های غیر اولیه (string,bool,int,...) هست ولی میشه با اونا هم استفاده کرد
اگه با انواع اولیه استفاده بشه اون متغیر مقدار پیش فرض می گیره (واسه اعداد صفر ، رشته ای یک رشته خالی و ...)
اما متغیر های غیر اولیه:
این متغیر ها از یک کلاس دات نتی ، کمپوننت یا یه کلاس ساخته شده توسط خودتون ایجاد می شن
Form frm;
EventArgs e;
myClass mc;
تو کد های بالا متغیر ها تعریف شدن ولی هیچ حافظه ای واشون تخصیص داده نشده (همگی مقدار null دارن)
وقتی اگه کد به صورت زیر باشه:
Form frm = new Form();
EventArgs e = new EventArgs();
myClass mc = new myClass();
متغیر ها تعریف و در Heap به اونها یک فضا اختصاص داده میشه پس تخصیص حافظه هم صورت میگیره
توجه کنید که ما دو نوع متغیر داریم (مقداری و ارجاعی):
انواع اولیه و ساختار ها(strut) از نوع مقداری هستند که در stack قرار می گیرن
انواع ارجاعی که تو کد های بالا مشاهده می کنید در Heap ایجاد می شن
گاهی هم نیاز به تبدیل اینها به همدیگه هست که عملیات Boxing و Unboxing انجام می شه
این توضیحات مختصر و کلی بودن که می تونید بیشتر دربارش تحقیق کنید از MSDN هم استفاده کنید
دنبال این کلمات باشید:
new
Value-type
reference-type
Heap
Boxing
Unboxing