برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط Arshan935 برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
بعد از ظهر بخیر برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
سجاد .
پسوند و پیشوند هم که قبلا گفتم .
برای یک متد ، یه return گذاشتی اما برات کافی نیست . میخوای بیشتر از یه نوع خروجی را برگردونی اما return (همونطور که میدونی) ، فقط یک مقدار را میتونه برگردونه . در این جور مواقع (که میخوای در یک متد ، بیشتر از یک خروجی داشته باشی) ، از کلمه ی کلیدی out میتونی استفاده کنی.
کلمه ی کلیدی ref ، تفاوت اساسی اش 2 چیز هست نسبت به کلمه ی کلیدی out :
1) موقع ارسالِ یک متغییری که کلمه ی کلیدی ref داره ، به آرگومان یک متد ، مثل متغییر strBld در کد زیر :
کد:private void Button4_Click(object sender, EventArgs e) { StringBuilder strBld = new StringBuilder("salam"); Method_1(ref strBld); MessageBox.Show(strBld.ToString()); } private void Method_1(ref StringBuilder par1) { par1 = new StringBuilder("khodahafez"); }
اگه درونِ اون متد (متد Method_1 در کد بالا) ، اشاره گرِ اون متغییر (متغییر par1 در کد بالا) ، تغییر کنه (مثلا مثل همین کد بالا ، شی جدیدی بهش اختصاص داده شده باشه) ، اشاره گرِ متغییری که موقع فراخونیِ این متد ، براش ارسال کردیم (اشاره گرِ متغییر strBld در کد بالا) هم به همون مقدار (جدیدی که در اون متد Method_1 تغییر داده بودیم) ، تغییر میکنه .
بنابراین با تغییر مقدار متغییری که کلمه ی کلیدیِ ref داره ، در متدِ صدا زده شده (متد با نام Method_1 در کد بالا) ، چون اشاره گرِ هر دو متغییری که کلمه ی کلیدیِ ref دارن (متغییر par1 و سپس متغییر strBld) تغییر میکنه و هر دو به یک مقدار اشاره میکنن ، هر دو ، یک مقدار را دارن و بنابراین در کد بالا ، بجای اینکه متغییر strBld ، مقدار salam را نمایش بده ، مقدارش به khodahafez تغییر میکنه و مقدار khodahafez را نمایش میده .
2) برخلاف out که جایز نیست برای ارسال مقدار به یک متد ازش استفاده بشه ، از ref میشه برای اینکه مقداری را به متدی ارسال کنیم ، استفاده کنیم .
کاربردش توی هر متدی میتونه باشه که برنامه نویس دوست داره با تغییرِ مقدارِ متغییر توی اون متد (مثل متد Method_1 در کد بالا) ، مقدار اصلی (مقداری که اون متغییر ، قبل از فراخونیِ متد داشت) هم تغییر کنه .
توی نوع های استراکچرها ، بیشتر کاربرد داره . معمولا برای ساخت تنظیمات یک برنامه ، یه استراکچری برای برنامه در نظر میگیرن . میتونه مثلا مقدار یک متغییری که یک تنظیم خاص را ذخیره میکنه ، با تغییر توی یک متد ، مقدار اصلی اش هم تغییر کنه . معمولا توی تنظیمات برنامه ای که دکمه ی ok نداره ، این جور موارد کاربرد داره .
البته فقط به این حد کاربردش محدود نمیشه . قضیه ی تنظیمات ، فقط یه مثال بود .
توی api های ویندوز و ... هم میتونه کاربرد داشته باشه و ... . بسته به برنامه نویس داره دیگه .
کلمه ی کلیدی ref را در قسمت 23 از دقیقه ی 50 تا دقیقه ی 1 ساعت و 20 دقیقه توضیح دادم . مخصوصا از دقیقه ی 1 ساعت و 11 دقیقه تا 1 ساعت و 17 دقیقه که اصل موضوعِ ref گفته شد .
کلمه ی کلیدی out ، اصلا برای ارسال مقداری استفاده نمیشه که حالا بخواد ارسال با ارجاع باشه یا ارسال با مقدار باشه . اسم out اصلا روش هست . یعنی خروجی . یعنی فقط کار return در متد را میکنه .برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط Arshan935 برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
کد زیر را تست کن :
ارور میده .کد:private void Button4_Click(object sender, EventArgs e) { int myInt = 10; Method_1(out myInt); MessageBox.Show(myInt.ToString()); } private void Method_1(out int par1) { MessageBox.Show(par1.ToString()); }
در متد Method_1 میگه متغییر par1 را هنوز مقداردهی نکردی که بخوای فراخونی اش کنی .
با اونکه براش مقدار 10 را فرستاده بودی .







Bookmarks