اهمیت Equals Method در #C

یکشنبه 7 تیر 1394

در این مقاله به اهمیت Equal Method در سی شارپ می پردازیم ، همچنین به نحوه بکارگیری این متد با ذکر مثال می پردازیم

اهمیت Equals Method در #C

درک مفهوم ()Equals در #C بسیار مهم میباشد .هنگامیکه ما سعی داریم تا دو مقدار را با یکدیگر مقایسه کنیم ، ممکن است که به جواب اشتباه برسیم . به عنوان مثال به کد زیر توجه فرمایید :


    string first = "Arun";  
    string second = "Arun";  

برای چک کردن دو متغیر میتوانیم از دستورات زیر استفاده کنیم :

Console.WriteLine(first == second);  
Console.WriteLine(first.Equals(second)); 

که خروجی مطابق تصویر زیر میباشد :

در این صورت مقدار True را نمایش میدهد ، حال اگر نوع داده را تغییر دهیبم ، مانند int و یا double ، آیا باز هم جواب یکسان است ؟

مشکل اصلی هنگامی رخ میدهد که بخواهیم بررسی کنیم که آیا یک شئی سفارشی یا (custom) برابر است یه خیر .اکنون با ذکر یک مثال، جزئیات را شرح خواهیم داد :


    public class Employee  
        {  
            public string Name { get; set; }  
            public int Age { get; set; }  
            public double Salary { get; set; }  
      
            Employee(string name, int age, double sal)  
            {  
                Name = name;  
                Age = age;  
                Salary = sal;  
            }  
      
            public List<Employee> GetEmployees()  
            {  
                var employeeList = new List<Employee>();  
      
                employeeList.Add(new Employee("Arunava", 29, 25000));  
                employeeList.Add(new Employee("Aamir", 56, 50000));  
                employeeList.Add(new Employee("Santanu", 78, 39000));  
                employeeList.Add(new Employee("Bubu", 67, 40000));  
      
                return employeeList;  
            }  
        }  

یک کلاس ساده با 3 خاصیت ، متد سازنده (constructor) و یک متد برای لیستی از پرسنل .حالا متد اصلی را بررسی می کنیم :


    static void Main(string[] args)  
            {  
                var employeeList = Employee.GetEmployees();  
      
                var checkEmployee = new Employee("Arunava", 29, 25000);  
                Console.WriteLine(employeeList.Contains(checkEmployee));  
                Console.ReadLine();  
      
            }  

متد checkEmployee که چک میکند متغیر آیا در داخل employeeList قرار دارد یا خیر

چگنه کامپیوتریا مترجم(compiler) باید تشخیص دهد که شما می خواهید یک اسم را برای مساوی بودن بررسی کنید یا این که یک مقدار عددی  را میخواهید بررسی کنید .

عموما وقتی که یک کلاس مخصوص (custom class) را میسازیم ، باید یک تابع برای بررسی برابر بودن مقادیر نیز تعریف کنیم .میتوانیم متد ()Equal را اجرا کنیم  و همچنین در اجرای عملیات ()gethashCode باقی بمانیم  و از عملگر == نیز میتوانیم استفاده کنیم .مانند کد زیر :


    public override bool Equals(object second)  
            {  
                return Equals(second as Employee);  
            }  
      
            public virtual bool Equals(Employee second)  
            {  
                if (second == null) { return false; }  
                if (object.ReferenceEquals(this, second)) { return true; }  
                return ((this.Name == second.Name) && (this.Salary == second.Salary) && (this.Age == second.Age));  
            }  
      
            public override int GetHashCode()  
            {  
                return this.Age;  
            }  
      
            public static bool operator ==(Employee item1, Employee item2)  
            {  
                if (object.ReferenceEquals(item1, item2)) { return true; }  
                if ((object)item1 == null || (object)item2 == null) { return false; }  
                return ((item1.Name == item2.Name) && (item1.Salary == item2.Salary) && (item1.Age == item2.Age));  
            }  
      
            public static bool operator !=(Employee item1, Employee item2)  
            {  
                return ((item1.Name == item2.Name) && (item1.Salary == item2.Salary) && (item1.Age == item2.Age));  
            }  

بعد از اجرای کد زیر ، اگر ما همان کدها را اجرا کنیم ، به نتیجه مطلوب خواهیم رسید .

var employeeList = Employee.GetEmployees();  
  
var checkEmployee = new Employee("Arunava", 29, 25000);  
Console.WriteLine(employeeList.Contains(checkEmployee));  
Console.ReadLine();

آموزش سی شارپ

احسان حسینی

نویسنده 42 مقاله در برنامه نویسان
  • C#.net
  • 3k بازدید
  • 1 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید