از کلمات کلیدی in، out و ref استفاده کنید تا پارامترها را به متدهای C# خود در دات نت منتقل کنید و کد خود را خواناتر و قابل نگهداری تر کنید.
کلمات کلیدی in
، out
و ref
کلمات کلیدی پرکاربرد در سی شارپ هستند. آنها به ما اجازه می دهند انتزاعات بهتری برای انواع داده ها و روش ها ایجاد کنیم، که به نوبه خود کد ما را خواناتر و قابل نگهداری تر می کند.
هم کلمه کلیدی in
و هم کلمه کلیدی out
به شما امکان می دهند پارامترها را با مرجع به یک روش منتقل کنید. کلمه کلیدی out
به شما امکان می دهد مقادیر پارامترها را تغییر دهید، در حالی که کلمه کلیدی in
به شما اجازه تغییر آنها را نمی دهد.
شما می توانید از کلمه کلیدی ref
برای ارسال پارامترهای ورودی و خروجی با مرجع استفاده کنید و به متد فراخوانی اجازه دهید در صورت نیاز آن آرگومان ها را تغییر دهد. با انتقال پارامترها توسط مرجع، کلمه کلیدی ref
تضمین می کند که تغییرات پارامترهای درون متد خارج از متد نیز منعکس می شوند.
در این مقاله، هر یک از این کلمات کلیدی را با جزئیات بیشتری بررسی خواهیم کرد تا بدانید در هنگام کار با سی شارپ چگونه و چه زمانی از آنها استفاده کنید. برای کار با نمونه کدهای ارائه شده در این مقاله، باید Visual Studio 2022 Preview را در سیستم خود نصب کنید. اگر قبلاً نسخهای ندارید، میتوانید پیشنمایش Visual Studio 2022 را از اینجا بارگیری کنید.< /p>
یک پروژه برنامه کاربردی کنسول در ویژوال استودیو ایجاد کنید
ابتدا، اجازه دهید یک پروژه برنامه کاربردی کنسول NET Core در ویژوال استودیو ایجاد کنیم. با فرض اینکه Visual Studio 2022 Preview در سیستم شما نصب شده است، مراحل ذکر شده در زیر را دنبال کنید تا یک پروژه برنامه کاربردی کنسول NET Core جدید در Visual Studio ایجاد کنید.
- Visual Studio 2022 Preview IDE را راه اندازی کنید.
- روی “ایجاد پروژه جدید” کلیک کنید.
- در پنجره “ایجاد پروژه جدید”، “Console App (.NET Core)” را از لیست الگوهای نمایش داده شده انتخاب کنید.
- بعدی را کلیک کنید.
- در پنجره “پیکربندی پروژه جدید خود” که در ادامه نشان داده شده است، نام و مکان پروژه جدید را مشخص کنید.
- بعدی را کلیک کنید
- در پنجره “اطلاعات اضافی” نشان داده شده در ادامه، .NET 7 را به عنوان نسخه دات نت که می خواهید استفاده کنید مشخص کنید.
- روی ایجاد کلیک کنید.
این یک پروژه برنامه کاربردی کنسول NET Core 7 جدید در Visual Studio 2022 Preview ایجاد می کند. ما از این پروژه برای کار با کلمات کلیدی in
، out
و ref
در بخشهای بعدی این مقاله استفاده خواهیم کرد.
کلمه کلیدی ref در سی شارپ
در سی شارپ، ارسال یک شی یا متغیر با مرجع با استفاده از کلمه کلیدی ref
انجام می شود. معمولاً وقتی متغیری به یک متد ارسال میشود، مقدار متغیر در متد کپی میشود تا بتوان در ادامه از آن استفاده کرد.
اما، اگر از ref
برای ارسال متغیر با مرجع استفاده کنیم، متغیر در متد کپی نمیشود. در عوض، روش برای دسترسی به متغیر اصلی از مرجع پیروی می کند. بنابراین، هر تغییری که روش فراخوانی شده در مقدار متغیر ایجاد کند، به متغیر اصلی انجام میشود.
لازم به ذکر است که باید کلمه کلیدی ref
را هم در امضای متد و هم در نقطه ای که متد فراخوانی می شود مشخص کنید. کد زیر را در نظر بگیرید:
void RefDemo(ref int refParameter)
{
refParameter = refParameter + 1;
}
int number = 1;
RefDemo(ref number);
Console.WriteLine(number);
وقتی کد قبلی را اجرا می کنید، عدد ۲ در کنسول نمایش داده می شود. این به این دلیل است که متغیری به نام number
توسط مرجع ارسال شده است و مقدار refParameter
در روش RefDemo
۱ افزایش یافته است.< /p>
قطعه کد زیر نشان می دهد که چگونه می توانید از کلمه کلیدی ref
با اشیا استفاده کنید.
void RefDemo(ref int refParameter)
{
refParameter = refParameter + 1;
}
int number = 1;
RefDemo(ref number);
Console.WriteLine(number);
هنگامی که کد قبلی را اجرا می کنید، متن “Hello World” در کنسول نمایش داده می شود.
در اینجا یک نکته جالب وجود دارد. اگر قطعه کد زیر را اجرا کنید، روش RefDemo
درست برمی گردد زیرا مراجع اشیاء str
و refParameter
یکسان هستند.< /p>
string str = "Hello";
string str = "Hello";
bool RefDemo(ref string refParameter)
{
refParameter = "Hello World";
return ReferenceEquals(str, refParameter);
}
bool isEqual = RefDemo(ref str);
Console.WriteLine(isEqual? "The two references are equal":"The two references are not equal");
کلمه کلیدی in در سی شارپ
کلمه کلیدی in
در سی شارپ برای تعیین اینکه پارامتر متد توسط مرجع ارسال می شود استفاده می شود، اما متد فراخوانی شده نمی تواند آرگومان را تغییر دهد. این برای پارامترهایی مفید است که توسط متد فراخوانی شده اصلاح نشدهاند، اما باید توسط مرجع ارسال شوند تا روش فراخوانی به نتایج دسترسی پیدا کند.
شکل ۱ نشان می دهد که نمی توانید مقدار یک پارامتر را تغییر دهید.
شکل ۱. خیر! کلمه کلیدی in
اجازه تغییر مقادیر پارامتر را نمی دهد.
کلید کلیدی out در سی شارپ
کلمه کلیدی out
تقریباً مانند کلمه کلیدی ref کار می کند. این به شما امکان می دهد پارامترها را با استفاده از مراجع ارسال کنید و مقادیر آن پارامترها را نیز تغییر دهید. کلمه کلیدی out
با کلمه کلیدی ref
یکسان است، با این تفاوت که ref
نیاز به مقداردهی اولیه متغیر قبل از ارسال دارد. هنگام کار با کلمه کلیدی out
در سی شارپ، هم امضای روش و هم روش فراخوانی باید به صراحت کلمه کلیدی out
را مشخص کنند.
به عنوان مثال، یک روش ممکن است نیاز به بازگرداندن کد موفقیت و مقدار داشته باشد. با استفاده از یک پارامتر خروجی برای متغیر (مثلا retValue
)، روش میتواند کد موفقیت را مستقیماً برگرداند و از پارامتر خروجی برای مقدار استفاده کند.
قطعه کد زیر نشان می دهد که چگونه می توانید با کلمه کلیدی out
در C# کار کنید.
int number;
OutDemo(out number);
Console.WriteLine(number); //The value is now 100
void OutDemo(out int number)
{
number = 100;
}
هنگامی که کد قبلی را اجرا می کنید، مقدار ۱۰۰ در کنسول نمایش داده می شود.
محدودیت های in، out، و ref
شما نمیتوانید از کلیدواژههای in
، out
و ref
در روشهای ناهمگام یا روشهای تکرارکننده استفاده کنید، مانند مواردی که از بازدید بازده
یا شکست بازده
. علاوه بر این، نمیتوانید از کلمه کلیدی in
در پارامتر اول برای یک روش پسوند استفاده کنید، مگر اینکه پارامتر یک struct
باشد.
لازم به ذکر است که کلیدواژههای in
، ref
و out
بخشی از امضای روش را هنگام تعیین اضافهبار تشکیل نمیدهند. از این رو، نمیتوانید روشهایی را که از نظر امضای متفاوت هستند، فقط با توجه به این کلمات کلیدی بارگذاری کنید.
به عبارت دیگر، اگر دو روش با نام یکسان دارید، اما یکی از آنها یک عدد صحیح را به عنوان پارامتر in
و دیگری یک عدد صحیح را به عنوان out
پارامتر، کد شما اصلا کامپایل نمی شود.
پست های مرتبط
نحوه استفاده از کلمات کلیدی in، out و ref در NET Core
نحوه استفاده از کلمات کلیدی in، out و ref در NET Core
نحوه استفاده از کلمات کلیدی in، out و ref در NET Core