نمایش نتایج 1 تا 9 از 9

نام تاپیک: ندادن مقدار اولیه به یک متغیر در C#‎

  1. #1

    Question ندادن مقدار اولیه به یک متغیر در C#‎

    سلام
    1- آیا با ندادن مقدار اولیه تخصیص حافظه برای اون متغیر صورت نمی گیرد؟

  2. #2
    کاربر دائمی آواتار arash ghafori
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    In Web
    پست
    208

    نقل قول: ندادن مقدار اولیه به یک متغیر در C#‎

    تخصیص حافظه صورت می گیرد . اگه نمیگرفت چیزی به اسم اشاره گر وجود نداشت.
    آخرین ویرایش به وسیله arash ghafori : پنج شنبه 28 اردیبهشت 1391 در 14:39 عصر

  3. #3

    نقل قول: ندادن مقدار اولیه به یک متغیر در C#‎‎

    فقط متغیرهای عددی اند که هنگام تخصیص حافظه با کلمه ی کلیدی new مقدار اولیه میگیرند؟

  4. #4
    کاربر دائمی آواتار arash ghafori
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    In Web
    پست
    208

    نقل قول: ندادن مقدار اولیه به یک متغیر در C#‎‎

    نقل قول نوشته شده توسط فاطمه_14 مشاهده تاپیک
    فقط متغیرهای عددی اند که هنگام تخصیص حافظه با کلمه ی کلیدی new مقدار اولیه میگیرند؟
    نه String ها هم از New استفاده میکنند.
    New یه کلمه ی کلیدیه که اون شی در حافظه ی Heap ایجاد شود. یعنی در Register ، که دسترسی به اون سریع تر از دسترسی به متغیر های دیگره.

  5. #5

    نقل قول: ندادن مقدار اولیه به یک متغیر در C#‎

     
    نه String ها هم از New استفاده میکنند.
    New یه کلمه ی کلیدیه که اون شی در حافظه ی Heap ایجاد شود. یعنی در Register ، که دسترسی به اون سریع تر از دسترسی به متغیر های دیگره.

    نه منظورم این نیست که کدوم متغیرها از new استفاده می کنند منظور من اینه که آیا فقط متغیرهای عددی اند که هنگام تخصیص حافظه با کلمه ی کلیدی new , مقدار اولیه میگیرند؟

  6. #6
    کاربر دائمی آواتار فرید نجفلو
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    تبریز
    پست
    1,189

    نقل قول: ندادن مقدار اولیه به یک متغیر در C#‎

    سلام
    ببیند اتفاقا 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

  7. #7

    نقل قول: ندادن مقدار اولیه به یک متغیر در C#‎

    اگه با انواع اولیه استفاده بشه اون متغیر مقدار پیش فرض می گیره (واسه اعداد صفر ، رشته ای یک رشته خالی و ...)
    من متاسفانه نرم افزار msdn رو ندارم اگه میشه کمکم کنید
    من وقتی
    string a=new string;
    می نویسم باز مقدار a متغیر null ه ولی آخه شما گفتید یه رشته ی خالیه؟شاید من اشتباه نوشتم! اگه اشتباه نوشتم میشه درستشو بنویسید

  8. #8
    کاربر دائمی آواتار فرید نجفلو
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    تبریز
    پست
    1,189

    نقل قول: ندادن مقدار اولیه به یک متغیر در C#‎

    سلام
    بله من گفتم مقدار پیش فرض string یه رشته خالیه ولی تو سی شارپ به این صورت عمل نمیشه و string سازنده(constructor) پیش فرض (بدون پارامتر نداره)
    خوب اینکار ها تو VB.NET یکی از مسائل جا افتاده است ولی کامپایلر بسیار محتاط سی شارپ اجازه این کار ها ر.و نمی ده
    به هر حال برای رشته ها و در کل انواع اولیه تخصیص صریح راحترین و معقولانه ترین راه هست:
    string a ="";
    int b=0;

  9. #9
    کاربر دائمی آواتار فرید نجفلو
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    تبریز
    پست
    1,189

    نقل قول: ندادن مقدار اولیه به یک متغیر در C#‎

    حالا که بحث پیش اومد لازم دونستم در مورد string چند ا مطلب بگم
    در مورد نوع string هم باید گفت درسته که در گروه انواع اولیه قرار داره ولی یه تفاوت اساسی با اونا داره
    اینکه string برعکس اونا از نوع ارجاعی هست و تو Heap قرار می گیره
    این نوع یکی از انواع قابل بحث هست چون:
    در حالی که از نوع ارجاعی هست ولی با == دو رشته باهم برابرند اگه مقدارشون برابر باشه و ممکنه ارجاعات جداگانه داشته باشن (برعکس سایر انواع ارجاعی)
    یعنی ممکنه تو کد زیر خط اول true باشه ولی خط دوم false(توجه کنید که string ها از نوع ارجاعی هستند):
    a==b;
    (object)a == (object)b;

    اگر بنویسیم
    string a="a";
    string b;
    b=a

    این دو دارای ارجاعی یکسان هستند و دریک مکان مشابه در حافظه قرار دارن (همانند مقادیر ارجاعی)
    ولی چنانچه در ادامه بنویسید
    b="b"

    در این لحظه a با مقدار "a" و متغیر b با مقدار "b" هر کدام در یک مکان جداگانه در حافظه قرار دارن(برعکس مقادیر ارجاعی)!!!

    و اینکه مقادیر رشته ای فقط خواندنی هستند یعنی در اصل نمی شه اونا رو درون حافظه ویرایش کرد و قتی شما یک رشته رو ویرایش می کنید در واقع رشته قبلی از بین رفته و یک رشته جدید جای اون رو می گیره

    رشته ها در نوع خود یکی از عجیبترین انواع هستند!

تاپیک های مشابه

  1. ایا می شود برای نوع Autonumber مقدار اولیه تعریف کرد
    نوشته شده توسط My_Love_Computer در بخش Access
    پاسخ: 6
    آخرین پست: پنج شنبه 24 اسفند 1396, 18:19 عصر
  2. آموزش: مقدار اولیه دادن به متغیر ها
    نوشته شده توسط محمد فدوی در بخش VB.NET
    پاسخ: 0
    آخرین پست: یک شنبه 30 خرداد 1389, 00:57 صبح
  3. چطور مقدار اولیه آرایه ها را نگه داریم
    نوشته شده توسط MBT1900x در بخش C#‎‎
    پاسخ: 1
    آخرین پست: یک شنبه 23 بهمن 1384, 07:02 صبح
  4. پاسخ: 5
    آخرین پست: پنج شنبه 17 آذر 1384, 09:12 صبح
  5. فیلد DBLookupComboBox و انتخاب موضوع و قرار ندادن مقدار
    نوشته شده توسط spicirmkh در بخش برنامه نویسی در Delphi
    پاسخ: 4
    آخرین پست: دوشنبه 27 بهمن 1382, 16:32 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •