آکادمی چابک | مرجع تخصصی جدیدترین دوره‌های آموزشی
جستجو برای:
سبد خرید 0
  • صفحه اصلی
  • دوره های آموزشی
  • اخبار و مقالات
  • درباره ما
  • تماس با ما
ورود
[suncode_otp_login_form]
گذرواژه خود را فراموش کرده اید؟
عضویت
[suncode_otp_registration_form]

ارسال مجدد کد یکبار مصرف (00:90)
  • 02177010771
  • info@chabokacademy.com
  • اخبار و مقالات
  • علاقمندی ها
آکادمی چابک | مرجع تخصصی جدیدترین دوره‌های آموزشی
  • صفحه اصلی
  • دوره های آموزشی
  • اخبار و مقالات
  • درباره ما
  • تماس با ما
شروع کنید
0

وبلاگ

آکادمی چابک | مرجع تخصصی جدیدترین دوره‌های آموزشی > اخبار و مقالات > برنامه نویسی > تفاوت‌های دو کلمه کلیدی ref و out در سی شارپ چیست؟

تفاوت‌های دو کلمه کلیدی ref و out در سی شارپ چیست؟

آذر 24, 1403
ارسال شده توسط ادمین آکادمی
برنامه نویسی
آموزش ref و out در c#

فهرست مطالب این نوشته

Toggle
  • تفاوت‌های اساسی بین ref و out چیست؟
    • نیاز به مقداردهی اولیه
    • کاربرد در متدها
  • مقایسه ویژگی‌های کدنویسی
  • استفاده در سربارگذاری متدها
  • تفاوت در زمان اجرا و زمان کامپایل
  • تغییر مقدار با استفاده از ref
    • تولید چندین خروجی با استفاده از out
  • کاربردهای عملی ref و out در سی شارپ چیست؟
تعداد بازدید: 152
5/5 امتیاز

یکی از مفاهیم مهم در زبان سی‌شارپ (C#) نحوه انتقال پارامترها به متدهاست. با این زبان قدرتمند و قابلیت‌های متنوع‌اش، می‌توانید داده‌ها را در حین اجرای برنامه بهتر مدیریت کنید.

chabokacademy
دوره‌های آموزشی آکادمی چابک
با تخفیف‌های ویژه آکادمی چابک، یادگیری را شروع کنید!

مشاهده دوره‌ها

​

دو کلمه کلیدی ref و out در سی‌ شارپ در انتقال پارامترها به صورت ارجاعی بسیار مهم هستند. در این مقاله به بررسی کامل تفاوت‌های این دو کلمه کلیدی پرداخته و با ارائه مثال‌های عملی، کاربردهای آن‌ها را توضیح خواهیم داد.

تفاوت‌های اساسی بین ref و out چیست؟

کلمه کلیدی ref در سی شارپ برای انتقال متغیرهایی که از قبل مقداردهی شده‌اند، مورد استفاده قرار می‌گیرد. این در حالی است که out برای انتقال متغیرهایی استفاده می‌شود که قرار است مقداردهی آن‌ها در داخل متد انجام شود.

به عنوان مثال، وقتی شما نیاز دارید یک متغیر موجود را تغییر دهید و نتیجه آن را پس از فراخوانی متد مشاهده کنید، از ref استفاده می‌کنید. از سوی دیگر، اگر نیاز باشد مقداری کاملاً جدید از یک متد بازگردانده شود، out راهکار مناسبی خواهد بود.

مفاهیم ref و out در سی شارپ

نیاز به مقداردهی اولیه

یکی از تفاوت‌های کلیدی بین این دو، الزام به مقداردهی اولیه است:

پارامترهای ref پیش از ارسال به متد باید مقداردهی شوند. اگر متغیر بدون مقداردهی باشد، کامپایلر با خطا مواجه خواهد شد.

در مقابل، پارامترهای out نیازی به مقدار اولیه ندارند. این پارامترها در داخل متد مقداردهی شده و سپس مورد استفاده قرار می‌گیرند.

برای مثال:

void ExampleRef(ref int number)

{

number += 10;

}

void ExampleOut(out int number)

{

number = 5;

}

در مثال بالا، ExampleRef نیاز دارد که مقدار number قبل از فراخوانی تعیین شود، اما در ExampleOut این وظیفه بر عهده متد است.

کاربرد در متدها

کلمه کلیدی ref و out در سی شارپ هر دو برای انتقال داده‌ها به صورت ارجاعی استفاده می‌شوند، اما نوع استفاده آن‌ها متفاوت است. برای درک بهتر، می‌توانید اینگونه تصور کنید:

ref بیشتر به عنوان واسطه‌ای برای دستکاری داده‌های موجود به کار می‌رود.

out بیشتر برای تولید و ارائه داده‌های جدید از یک متد مفید است.

مقایسه ویژگی‌های کدنویسی

هر دو کلمه کلیدی نیاز به رعایت قوانین مشخصی دارند:

آموزش لاراول: یادگیری فریم‌ورک PHP برای ساخت اپلیکیشن‌های حرفه‌ای
بخوانید

در تعریف متد باید به وضوح مشخص شود که پارامتر از نوع ref یا out است.

هنگام فراخوانی متد نیز کلمه کلیدی باید ذکر شود.

این ویژگی، شفافیت کد را افزایش داده تا به راحتی نوع انتقال پارامترها را درک کنید.

استفاده در سربارگذاری متدها

یکی از محدودیت‌های جالب در سی‌شارپ این است که نمی‌توان از ref و out در تعریف سربارگذاری یک متد به طور همزمان استفاده کرد. دلیل این محدودیت به نحوه مدیریت کامپایلر برمی‌گردد. کامپایلر قادر به تشخیص تفاوت بین این دو در سربارگذاری نیست و این امر می‌تواند منجر به بروز ابهام شود.

به عنوان مثال، تعریف زیر با خطا مواجه خواهد شد:

void Example(ref int number) { }

void Example(out int number) { } // خطا

مقایسه ref و out در سی شارپ

تفاوت در زمان اجرا و زمان کامپایل

در زمان کامپایل، کامپایلر بررسی می‌کند که آیا تمام قوانین استفاده از ref و out در سی شارپ رعایت شده است یا خیر. اما در زمان اجرا، تفاوت‌های نحوه مدیریت این دو توسط CLR مشخص می‌شود. ref به عنوان مرجعی به یک مقدار موجود عمل می‌کند، در حالی که out تنها زمانی فعال می‌شود که مقداردهی در داخل متد انجام شده باشد.

نمونه کدهای کاربردی به مانند زیر می‌باشند:

تغییر مقدار با استفاده از ref

void UpdateValue(ref int value)

{

value *= 2;

}

int number = 5;

UpdateValue(ref number);

Console.WriteLine(number); // خروجی: 10

تولید چندین خروجی با استفاده از out

void GetValues(out int value1, out int value2)

{

value1 = 3;

value2 = 7;

}

GetValues(out int a, out int b);

Console.WriteLine($”a: {a}, b: {b}”); // خروجی: a: 3, b: 7

کاربردهای عملی ref و out در سی شارپ چیست؟

موارد استفاده از ref به شرح زیر است:

  • تغییر مقادیر در یک الگوریتم محاسباتی.
  • بهینه‌سازی حافظه برای انتقال داده‌های حجیم.

out در سناریوهایی مفید است که بخواهید چندین خروجی را از یک متد بازگردانید، مانند:

  • انجام محاسبات پیچیده و بازگرداندن نتایج متعدد.
  • استخراج داده‌های خاص از یک پایگاه داده.

نتیجه‌گیری

کلمه کلیدی ref و out در سی شارپ هر دو برای انتقال داده‌ها به صورت ارجاعی استفاده می‌شوند، اما تفاوت‌های اساسی در نحوه استفاده و نیازهای آن‌ها وجود دارد. ref برای کار با داده‌های موجود و out برای ارائه خروجی‌های جدید مناسب است.

آموختن تفاوت‌های کلیدی بین ref و out تنها بخشی از سفر یادگیری عمیق‌تر سی شارپ است. در آکادمی چابک، با دوره‌های تخصصی و به‌روز، شما می‌توانید با اطمینان بیشتری در دنیای برنامه‌نویسی پیش بروید و به موفقیت‌های بزرگ‌تری دست یابید.

منبع:

dotnettutorials.net​

قبلی چگونه از PyGame برای ساخت بازی‌های دوبعدی با Python استفاده کنیم؟
بعدی تفاوت بین Class و Struct در برنامه نویسی سی شارپ

دیدگاهتان را بنویسید لغو پاسخ

جستجو برای:
دسته‌ها
  • آموزش گرافیک کامپیوتری
  • امنیت و شبکه
  • برنامه نویسی
  • پایگاه داده
  • سیستم عامل
  • طراحی وب
  • کسب و کار
  • هوش مصنوعی
برچسب‌ها
MBA آموزش و کاربرد هوش مصنوعی اهداف شغلی بازاریابی محصول کسب و کار اینترنتی
logoacademy
آکادمی چابک با برگزاری دوره‌های جامع و تخصصی در حوزه‌ی نرم‌افزار، تحلیل کسب‌وکار و همچنین مشاوره‌های تخصصی در این حوزه‌ها سعی بر آن دارد تا علاقمندان پس از گذراندن دوره‌های مربوطه بتوانند از دانش و مهارت‌ خود بهترین استفاده را کرده و وارد بازار کار شوند.
 

ارتباط با ما

  • ۰۲۱۷۷۰۱۰۷۷۱
  • info@chabokacademy.com
  • حکیمیه، بلوار بابائیان، ۱۵ متری امام حسین، بن بست شفاعت، پلاک ۱۵، طبقه ۷

دسترسی سریع

  • خانه
  • دوره ها
  • اخبار و مقالات
  • تماس با ما
  • خانه
  • دوره ها
  • اخبار و مقالات
  • تماس با ما

نماد‌ها و خبرنامه

۱۴۰۲© کلیه حقوق سایت نزد آکادمی چابک محفوظ است.

  • Afghanistan (+93)
  • Albania (+355)
  • Algeria (+213)
  • American Samoa (+1)
  • Andorra (+376)
  • Angola (+244)
  • Anguilla (+1)
  • Antigua (+1)
  • Argentina (+54)
  • Armenia (+374)
  • Aruba (+297)
  • Australia (+61)
  • Austria (+43)
  • Azerbaijan (+994)
  • Bahrain (+973)
  • Bangladesh (+880)
  • Barbados (+1)
  • Belarus (+375)
  • Belgium (+32)
  • Belize (+501)
  • Benin (+229)
  • Bermuda (+1)
  • Bhutan (+975)
  • Bolivia (+591)
  • Bonaire, Sint Eustatius and Saba (+599)
  • Bosnia and Herzegovina (+387)
  • Botswana (+267)
  • Brazil (+55)
  • British Indian Ocean Territory (+246)
  • British Virgin Islands (+1)
  • Brunei (+673)
  • Bulgaria (+359)
  • Burkina Faso (+226)
  • Burundi (+257)
  • Cambodia (+855)
  • Cameroon (+237)
  • Canada (+1)
  • Cape Verde (+238)
  • Cayman Islands (+1)
  • Central African Republic (+236)
  • Chad (+235)
  • Chile (+56)
  • China (+86)
  • Colombia (+57)
  • Comoros (+269)
  • Cook Islands (+682)
  • Côte d'Ivoire (+225)
  • Costa Rica (+506)
  • Croatia (+385)
  • Cuba (+53)
  • Curaçao (+599)
  • Cyprus (+357)
  • Czech Republic (+420)
  • Democratic Republic of the Congo (+243)
  • Denmark (+45)
  • Djibouti (+253)
  • Dominica (+1)
  • Dominican Republic (+1)
  • Ecuador (+593)
  • Egypt (+20)
  • El Salvador (+503)
  • Equatorial Guinea (+240)
  • Eritrea (+291)
  • Estonia (+372)
  • Ethiopia (+251)
  • Falkland Islands (+500)
  • Faroe Islands (+298)
  • Federated States of Micronesia (+691)
  • Fiji (+679)
  • Finland (+358)
  • France (+33)
  • French Guiana (+594)
  • French Polynesia (+689)
  • Gabon (+241)
  • Georgia (+995)
  • Germany (+49)
  • Ghana (+233)
  • Gibraltar (+350)
  • Greece (+30)
  • Greenland (+299)
  • Grenada (+1)
  • Guadeloupe (+590)
  • Guam (+1)
  • Guatemala (+502)
  • Guernsey (+44)
  • Guinea (+224)
  • Guinea-Bissau (+245)
  • Guyana (+592)
  • Haiti (+509)
  • Honduras (+504)
  • Hong Kong (+852)
  • Hungary (+36)
  • Iceland (+354)
  • India (+91)
  • Indonesia (+62)
  • Iran (+98)
  • Iraq (+964)
  • Ireland (+353)
  • Isle Of Man (+44)
  • Israel (+972)
  • Italy (+39)
  • Jamaica (+1)
  • Japan (+81)
  • Jersey (+44)
  • Jordan (+962)
  • Kazakhstan (+7)
  • Kenya (+254)
  • Kiribati (+686)
  • Kuwait (+965)
  • Kyrgyzstan (+996)
  • Laos (+856)
  • Latvia (+371)
  • Lebanon (+961)
  • Lesotho (+266)
  • Liberia (+231)
  • Libya (+218)
  • Liechtenstein (+423)
  • Lithuania (+370)
  • Luxembourg (+352)
  • Macau (+853)
  • Macedonia (+389)
  • Madagascar (+261)
  • Malawi (+265)
  • Malaysia (+60)
  • Maldives (+960)
  • Mali (+223)
  • Malta (+356)
  • Marshall Islands (+692)
  • Martinique (+596)
  • Mauritania (+222)
  • Mauritius (+230)
  • Mayotte (+262)
  • Mexico (+52)
  • Moldova (+373)
  • Monaco (+377)
  • Mongolia (+976)
  • Montenegro (+382)
  • Montserrat (+1)
  • Morocco (+212)
  • Mozambique (+258)
  • Myanmar (+95)
  • Namibia (+264)
  • Nauru (+674)
  • Nepal (+977)
  • Netherlands (+31)
  • New Caledonia (+687)
  • New Zealand (+64)
  • Nicaragua (+505)
  • Niger (+227)
  • Nigeria (+234)
  • Niue (+683)
  • Norfolk Island (+672)
  • North Korea (+850)
  • Northern Mariana Islands (+1)
  • Norway (+47)
  • Oman (+968)
  • Pakistan (+92)
  • Palau (+680)
  • Palestine (+970)
  • Panama (+507)
  • Papua New Guinea (+675)
  • Paraguay (+595)
  • Peru (+51)
  • Philippines (+63)
  • Poland (+48)
  • Portugal (+351)
  • Puerto Rico (+1)
  • Qatar (+974)
  • Republic of the Congo (+242)
  • Romania (+40)
  • Reunion (+262)
  • Russia (+7)
  • Rwanda (+250)
  • Saint Helena (+290)
  • Saint Kitts and Nevis (+1)
  • Saint Pierre and Miquelon (+508)
  • Saint Vincent and the Grenadines (+1)
  • Samoa (+685)
  • San Marino (+378)
  • Sao Tome and Principe (+239)
  • Saudi Arabia (+966)
  • Senegal (+221)
  • Serbia (+381)
  • Seychelles (+248)
  • Sierra Leone (+232)
  • Singapore (+65)
  • Sint Maarten (+1)
  • Slovakia (+421)
  • Slovenia (+386)
  • Solomon Islands (+677)
  • Somalia (+252)
  • South Africa (+27)
  • South Korea (+82)
  • South Sudan (+211)
  • Spain (+34)
  • Sri Lanka (+94)
  • St. Lucia (+1)
  • Sudan (+249)
  • Suriname (+597)
  • Swaziland (+268)
  • Sweden (+46)
  • Switzerland (+41)
  • Syria (+963)
  • Taiwan (+886)
  • Tajikistan (+992)
  • Tanzania (+255)
  • Thailand (+66)
  • The Bahamas (+1)
  • The Gambia (+220)
  • Timor-Leste (+670)
  • Togo (+228)
  • Tokelau (+690)
  • Tonga (+676)
  • Trinidad and Tobago (+1)
  • Tunisia (+216)
  • Turkey (+90)
  • Turkmenistan (+993)
  • Turks and Caicos Islands (+1)
  • Tuvalu (+688)
  • U.S. Virgin Islands (+1)
  • Uganda (+256)
  • Ukraine (+380)
  • United Arab Emirates (+971)
  • United Kingdom (+44)
  • United States (+1)
  • Uruguay (+598)
  • Uzbekistan (+998)
  • Vanuatu (+678)
  • Venezuela (+58)
  • Vietnam (+84)
  • Wallis and Futuna (+681)
  • Western Sahara (+212)
  • Yemen (+967)
  • Zambia (+260)
  • Zimbabwe (+263)
ورود
با شماره موبایل
آیا هنوز عضو نشده اید؟ اکنون ثبت نام کنید
ثبت نام
قبلا عضو شده اید؟ اکنون وارد شوید
محافظت شده توسط