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 C# : Sélectionner tout - Visualiser dans une fenêtre à part
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:
Donc ma surcharge de la méthode Equals(MyClass obj) est complètement ignorée. Une raison ?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
Partager