Hello,
je cherche a connaitre la difference entre ces deux methodes :
Il me semble que sémantiquement c'est la meme chose. --> Quel interret à l'interface IEquatable<...> ??Code:
1
2 bool IEquatable<(Of <(T>)>)::Equals() bool Object::Equals()
merci
Version imprimable
Hello,
je cherche a connaitre la difference entre ces deux methodes :
Il me semble que sémantiquement c'est la meme chose. --> Quel interret à l'interface IEquatable<...> ??Code:
1
2 bool IEquatable<(Of <(T>)>)::Equals() bool Object::Equals()
merci
object.Equals(object other);
IEquatable<T>.Equals(T other);
L'un est typé, l'autre pas. Mais je sais pas si c'est tout.
a mon avis, le object.Equals(object other) regarde seulement la reference des objets pour des classes a toi exemple :
Ce code n'affiche pas ok, pourtant t1 et t2 sont "egaux", mais l'ordi peut pas deviner que etre egaux pour toi veux dire ca...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 test t1 = new test(), t2 = new test(); t1.a = 0; t1.b = 0; t2.a = 0; t2.b = 0; if (t1.Equals(t2)) { MessageBox.Show("Ok"); } public class test { public int a, b; }
c'est pour cela que tu peux utiliser ton interface IEquatable je pense...
et meme si tu peux overrider la fonction equals ds la classe, ca reste un equals non type comme l'a dit Guulh...
L'utilite principale que je vois, c'est de pouvoir avoir plusieurs test d'egalite possible pour plusieurs types par exemple... au lieu de faire un test du type dans le Equals, tu as une fonction pour chaque type, ce qui est beaucoup plus propre je pense.
Ca a particulièrement du sens lorsque tu écris ce genre de code :
Ca permet donc de définir explicitement dans la signature d'un objet que ce dernier peut supporter une comparaison d'égalité avec un autre type.Citation:
class MyObject : IEquatable<MyObject>, IEquatable<MyOtherObject>
{
...
public bool Equals(MyObject obj)
{
return this._myMember == obj.MyMember;
}
public bool Equals(MyOtherObject obj)
{
return this._myMember == obj.OtherMember ;
}
Si tu fais une méthode
int ComparerObject( IEquatable<MaClasse> )
Seuls les objets qui supporte une comparaison d'égalité avec une instance de MaClasse pourront être passés, et encore faudra-t-il qu'ils définissent l'interface.
ok
:resolu: