Override Equals Method Of Value Types
11 September 2015
Hello everybody.
Today I want to give some demo.
using System; using System.Diagnostics; namespace StackOverflowQuest { class Program { struct StructTest { public string TestString { get; set; } //public override bool Equals(object obj) //{ // var ct = (StructTest)obj; // return ct.TestString == this.TestString; //} } class ClassTest { public string TestString { get; set; } public override bool Equals(object obj) { var ct = obj as ClassTest; if (ct == null) return false; return ct.TestString == this.TestString; } } static void Main(string[] args) { StructTest st = new StructTest() { TestString = "water"}; StructTest st2 = new StructTest() { TestString = "water" }; ClassTest ct1 = new ClassTest() { TestString = "water" }; ClassTest ct2 = new ClassTest() { TestString = "water" }; int numberOfIterations = 500000; Stopwatch sw2 = new Stopwatch(); sw2.Start(); for (int i = 0; i < numberOfIterations; i++) { ct1.Equals(ct2); } sw2.Stop(); Console.WriteLine("class perfomance = {0} Elapsed Milliseconds", sw2.ElapsedMilliseconds); Stopwatch sw1 = new Stopwatch(); sw1.Start(); for(int i = 0; i < numberOfIterations; i++) { st.Equals(st2); } sw1.Stop(); Console.WriteLine("structs perfomance = {0} Elapsed Milliseconds", sw1.ElapsedMilliseconds); Console.ReadKey(); } } }
Take note of commented method of Equals method. If I execute that code on my machine, I'm getting difference in perfomance in 6 times. But if to uncomment Equals, then class and struct have comparable perfomance.