مطلب جالبی درباره string در دات نت!

به تکه کد زیر یک نگاهی بکنید:

دو تا متغیر از نوع رشته در سی شارت درست کرده ایم. سپس با متد ReferenceEquals مربوط به کلاس object بررسی کرده ایم که آیا reference این دو متغیر یکسان هستند یا نه. همون طور که می دانید string از انواع Reference هستش، باید دو متغیری که درست کرده ایم با دو رفرنس متفاوت باشند. در واقع دو object جداگانه برای هر کدام ایجاد شده باشد. ولی این طور نیست! و نتیجه متد ReferenceEquals نشون میده که این دو متغیر از نظر reference یکسان هستند! یک مقداری بی معنی به نظر میرسه. ولی دلیل این اتفاق این است که دات نت برای درست کردن مقادیر از نوع string از یک مکانیزم به نام pool استفاده می کنه. وقتی شما یک مقدار رشته ای رو ایجاد میکنید اگر این مقدار در pool مورد نظر باشه اشاره گری به اون برگردونده میشه، این کار رو نمیکنه که یک شی جدید برای اون بسازه. جالبه! یکی از دلایلی که string ها immutable هستند هم همینه! جالبه…