۱۴۰۴/۰۷/۰۹ Nebular

مقایسه اشیاء در C#

۱. عملگر ==

  • رفتار پیش‌فرض:
    • برای Value Type‌ها مثل int, bool → مقدار واقعی را مقایسه می‌کند.
    • برای Reference Type‌ها مثل class → آدرس (Reference) را مقایسه می‌کند.

مثال:

class Person { public string Name; }

Person p1 = new Person { Name = "Ali" };
Person p2 = new Person { Name = "Ali" };

Console.WriteLine(p1 == p2); // False → چون دو شیء مجزا در Heap هستند

اگر بخواهیم == محتوا را مقایسه کند باید عملگر را overload کنیم.


✅ ۲. متد Equals()

  • Equals() یک متد مجازی از کلاس پایه Object است.
  • می‌توان آن را override کرد تا محتوا را مقایسه کند.

مثال:

class Person
{
    public string Name;

    public override bool Equals(object obj)
    {
        if (obj is Person other)
            return this.Name == other.Name;
        return false;
    }

    public override int GetHashCode()
    {
        return Name.GetHashCode();
    }
}

Person p1 = new Person { Name = "Ali" };
Person p2 = new Person { Name = "Ali" };
Console.WriteLine(p1.Equals(p2)); // True

⚠ نکته مهم: وقتی Equals() را override می‌کنی باید حتماً GetHashCode() را هم override کنی تا در Dictionary/HashSet درست کار کند.


✅ ۳. مرتب‌سازی با IComparable<T>

اگر بخواهی یک کلاس در Sort یا OrderBy قابل مقایسه باشد، باید اینترفیس IComparable<T> را پیاده‌سازی کنی.

مثال:

class Person : IComparable<Person>
{
    public string Name;
    public int Age;

    public int CompareTo(Person other)
    {
        return this.Age.CompareTo(other.Age); // مرتب‌سازی بر اساس سن
    }
}

List<Person> list = new List<Person>
{
    new Person { Name = "Ali", Age = 30 },
    new Person { Name = "Sara", Age = 25 }
};

list.Sort();

🔎 جدول مقایسه برای آزمون

روشقابل overrideکاربردپیش‌فرض برای Classپیش‌فرض برای Struct
==بله (operator overload)مقایسه سریعمقایسه Referenceمقایسه مقدار
Equals()بلهمقایسه محتوامقایسه Referenceمقایسه مقدار
IComparable<T>بلهمرتب‌سازی (Sort, OrderBy)

✅ جمع‌بندی نکات مهم آزمونی

  • == → برای Reference Type فقط آدرس را مقایسه می‌کند مگر overload شود.
  • Equals() → اگر override نشده باشد مثل == رفتار می‌کند.
  • IComparable<T> → برای مرتب‌سازی استفاده می‌شود.
Accept Cookies
Accept Cookies
[your-shortcode]