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






Répondre avec citation








Partager