TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 548 subscribers
Post #52 95
🔒 رازهای string در #C :
تغییرناپذیری (Immutability) و جادوی برابری


همه‌ی ما هر روز با string کار می‌کنیم، ولی دو تا از بزرگترین رازهای رفتاریش رو می‌دونید؟ stringها در سی‌شارپ هم تغییرناپذیرن و هم اپراتور == روشون یه رفتار خاص داره.

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

1️⃣ راز اول:
🛡تغییرناپذیری (Immutability):

وقتی یه string می‌سازید، دیگه هرگز نمی‌تونید محتوای اون رو در حافظه تغییر بدید. هر عملیاتی که به نظر میاد داره یه string رو عوض می‌کنه (مثل ToUpper() یا +)، در واقع داره یه string کاملاً جدید در حافظه می‌سازه و قبلی رو دست‌نخورده رها می‌کنه.

مثال:
string s1 = "hello";

// این کد s1 را تغییر نمی‌دهد!
// بلکه یک رشته جدید ("HELLO") می‌سازد و در s2 قرار می‌دهد.
string s2 = s1.ToUpper();

Console.WriteLine($"s1: {s1}"); // خروجی: s1: hello
Console.WriteLine($"s2: {s2}"); // خروجی: s2: HELLO


چرا این ویژگی خوبه؟
این ویژگی باعث میشه کد شما قابل پیش‌بینی‌تر، امن‌تر (به خصوص در محیط‌های چندنخی یا Multi-threaded) و بهینه‌تر باشه، چون کامپایلر می‌تونه رشته‌های یکسان رو در حافظه به اشتراک بذاره (به این کار String Interning میگن).

2️⃣راز دوم:
🎭جادوی برابری (==)

تو پست "تله‌های برابری" دیدیم که == روی Reference Typeها، آدرس حافظه رو مقایسه می‌کنه. string هم یه Reference Type هست، پس چرا این کد true برمی‌گردونه؟

string a = "test";
string b = "test";

Console.WriteLine(a == b); // خروجی: True! ولی چرا؟


جواب:
چون تیم طراح #C اپراتور == رو برای string به صورت خاص بازنویسی (Overload) کرده. اون‌ها می‌دونستن که ۹۹٪ مواقع وقتی دو تا رشته رو مقایسه می‌کنیم، منظورمون مقایسه محتوای اون‌هاست، نه آدرس حافظه‌شون. پس این اپراتور رو هوشمند کردن تا کار ما رو راحت‌تر کنن و جلوی یه باگ رایج رو بگیرن!

این یکی از نمونه‌های طراحی هوشمندانه در زبان #C هست.

🤔 حرف حساب و تجربه شما
این رفتارهای خاص string، نمونه‌ای عالی از طراحی هوشمندانه در زبان #C هست که هم به کارایی کمک می‌کنه و هم جلوی خطاهای رایج رو می‌گیره.

آیا تا حالا به این فکر کرده بودید که وقتی یه رشته رو با + ترکیب می‌کنید، در واقع دارید رشته‌های جدید در حافظه می‌سازید (که می‌تونه روی پرفورمنس تاثیر بذاره)؟ یا از رفتار خاص == برای string خبر داشتید؟

🔖 هشتگ‌ها :
#CSharp
#String
#BestPractices
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 →