A quoi servent Equals(object obj) et GetHashCode()
Bonjour,
A quoi servent les méthodes par défaut Equals(object obj) et GetHashCode() de la classe Object ? En d'autres mots que trouve t-on dans le corps de ces deux méthodes ?
Dans un même temps je me suis amusé à réaliser le programme suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
namespace ConsoleApplication1
{
class MyClass
{
private int _value;
public int Value
{
get { return _value; }
set { _value = value; }
}
public MyClass(int value)
{
this._value = value;
}
public override bool Equals(object obj)
{
Debug.WriteLine("Equals(object obj) " + obj.GetType().ToString());
return base.Equals(obj);
}
public bool Equals(MyClass obj)
{
Debug.WriteLine("Equals(MyClass obj) " + obj.GetType().ToString());
return this._value == obj.Value;
}
public override int GetHashCode()
{
Debug.WriteLine("GetHashCode()");
return _value;
}
}
class Program
{
static void Main(string[] args)
{
List<MyClass> list = new List<MyClass>();
list.Add(new MyClass(1));
list.Add(new MyClass(2));
list.Add(new MyClass(3));
list.Add(new MyClass(4));
list.Add(new MyClass(5));
MyClass testdata = new MyClass(3);
Debug.WriteLine(list.Contains(testdata).ToString());
}
}
} |
En debug j'ai ceci:
Citation:
Equals(object obj) ConsoleApplication1.MyClass
Equals(object obj) ConsoleApplication1.MyClass
Equals(object obj) ConsoleApplication1.MyClass
Equals(object obj) ConsoleApplication1.MyClass
Equals(object obj) ConsoleApplication1.MyClass
False
Donc ma surcharge de la méthode Equals(MyClass obj) est complètement ignorée. Une raison ?