مقایسه Reference Typeها
اینجاست که داستان جالب میشه! برای Reference Typeها (مثل class)، اپراتور == به صورت پیشفرض، محتوای داخلی آبجکتها رو مقایسه نمیکنه.
در عوض، آدرس اونها در حافظه رو مقایسه میکنه. یعنی از خودش میپرسه: "آیا این دو متغیر، به یک آبجکت یکسان در حافظه اشاره میکنن؟"
یادتونه گفتیم Reference Type مثل کلید یه خونهست؟ اینجا == چک نمیکنه که آیا دو تا خونه دکوراسیون یکسانی دارن یا نه. فقط چک میکنه که آیا این دو تا کلید، برای یک خونهی یکسان هستن یا برای دو تا خونهی جدا که فقط شبیه هم ساخته شدن.
مثال کلاس Dude رو ببینید:
public class Dude
{
public string Name;
public Dude(string n) { Name = n; }
}
// ...
// ما دو تا آبجکت جداگانه در حافظه میسازیم که هر دو اسمشون "John" هست
Dude d1 = new Dude("John");
Dude d2 = new Dude("John");
// اینجا d3 کلید خونهی d1 رو میگیره، خونه جدیدی ساخته نمیشه
Dude d3 = d1;
// آیا d1 و d2 به یک آبجکت یکسان اشاره میکنند؟ نه!
// (دو تا خونه جدا ولی شبیه به هم)
Console.WriteLine(d1 == d2); // خروجی: False
// آیا d1 و d3 به یک آبجکت یکسان اشاره میکنند؟ بله!
// (دو تا کلید برای یک خونه)
Console.WriteLine(d1 == d3); // خروجی: True