TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 548 subscribers
Post #69 137
🔬 تکنیک‌های پیشرفته #C :
شیرجه عمیق در ref locals و ref returns

آماده‌اید که به بخش‌های عمیق و کمتر دیده‌شده #C سفر کنیم؟ امروز می‌خوایم در مورد دو تا قابلیت قدرتمند ولی خاص صحبت کنیم که برای بهینه‌سازی‌های سطح پایین و کارهای حرفه‌ای استفاده میشن: ref locals و ref returns.

اینها ابزارهای روزمره شما نیستن، ولی شناختنشون شما رو به درک عمیق‌تری از قدرت و انعطاف #C می‌رسونه.

1️⃣این ref local چیست؟ یک نام مستعار برای حافظه
یه ref local، یه متغیر محلیه که یک کپی از مقدار نیست، بلکه یک ارجاع یا نام مستعار مستقیم به حافظه‌ی یک متغیر دیگه‌ست (مثل یک عنصر آرایه یا یک فیلد).

این یعنی هر تغییری روی این متغیر، مستقیماً روی مقدار اصلی اعمال میشه!
int[] numbers = { 0, 1, 2, 3, 4 };

// numRef حالا یک نام دیگر برای numbers[2] است
ref int numRef = ref numbers[2];

// هر تغییری روی numRef، مستقیماً روی عنصر آرایه اعمال میشه
numRef *= 10;

Console.WriteLine(numRef); // خروجی: 20
Console.WriteLine(numbers[2]); // خروجی: 20 (عنصر اصلی هم تغییر کرد!)

2️⃣حالا ref return چیست؟ برگرداندن آدرس به جای مقدار 💥
یه متد می‌تونه به جای برگردوندن مقدار یک متغیر، رفرنس یا آدرس حافظه‌ی اون رو برگردونه. این کار به کدی که متد رو صدا زده، اجازه دسترسی مستقیم و تغییر مقدار اصلی رو میده.
class Program
{
static string x = "Old Value";

// این متد، رفرنس به فیلد x رو برمی‌گردونه
static ref string GetX() => ref x;

static void Main()
{
// xRef یک رفرنس مستقیم به x میشه
ref string xRef = ref GetX();

// تغییر xRef، خودِ متغیر استاتیک x رو تغییر میده
xRef = "New Value";

Console.WriteLine(x); // خروجی: New Value
}
}


3️⃣نوبت ref readonly: ترکیب پرفورمنس و ایمنی 🛡
گاهی وقتا شما می‌خواید از مزیت پرفورمنس برگردوندن رفرنس (جلوگیری از کپی شدن داده‌های بزرگ) استفاده کنید، ولی نمی‌خواید کدی که اون رو دریافت کرده، بتونه مقدار اصلی رو تغییر بده.

اینجاست که ref readonly وارد میشه. با این قابلیت، شما رفرنس رو برمی‌گردونید، ولی اون رفرنس فقط-خواندنی خواهد بود.

4️⃣هشدار و کاربرد اصلی ⚠️
این قابلیت‌ها ابزارهای روزمره شما نیستن. اون‌ها برای micro optimization های خاص طراحی شدن، به خصوص در سناریوهای پرفورمنس بالا مثل کار با <Span<T یا در بازی‌سازی که هر نانوثانیه مهمه.

در ۹۹٪ مواقع، شما به این‌ها نیاز ندارید و کد ساده‌تر، همیشه بهتره.

🤔 حرف حساب و تجربه شما

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

آیا تا حالا از ref locals یا ref returns تو پروژه‌ای استفاده کردید؟ یا اصلاً از وجودشون خبر داشتید؟

خب، اینجا که نمیشه همه حرفا رو زد! 😉
ادامه‌ی بحث، سوالات، غر زدن‌ها و گپ و گفت‌های خودمونی، فقط تو گروه.

[C# Geeks Hangout]

🔖 هشتگ‌ها:
#Ref
#CSharp
#AdvancedCSharp
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →