Solution:
Dart prend en charge la surcharge de l’opérateur à l’aide du opérateur mot-clé suivi de l’opérateur que vous souhaitez surcharger. L’exemple suivant surcharge le == opérateur pour le Ma classe objet:
class MyClass {
operator ==(MyClass other) {
// compare this to other
}
}
presque tous les opérateurs intégrés de Darts peuvent être surchargés à quelques exceptions notables étant l’opérateur d’affectation = et opérateur d’équivalence de référence === (n’existe plus).
Quant à l’avantage de la surcharge d’opérateurs, elle permet de réutiliser des opérateurs qui ont une signification sémantique bien connue tels que == ou + pour les opérations sur vos objets. Par exemple, si vous avez une classe Matrix qui surcharge le + opérateur, vous pouvez ajouter deux matrices en utilisant la syntaxe m1 + m2 au lieu du plus encombrant m1.plus(m2)
La réponse choisie n’est plus valable lorsque vous essayez des surcharges à l’aide de la ==
opérateur dans la nouvelle version. Maintenant, vous devez faire ceci :
class MyClass {
@override
bool operator ==(other) {
// compare this to other
}
}
Mais ce n’est pas sûr. other
n’est pas spécifié en tant que type, quelque chose d’inattendu peut se produire. Par exemple:
void main() {
var a = A(1);
var b = B(1);
var result = a == b;
print(result); //result is true
}
class A {
A(this.index);
final int index;
@override
bool operator ==(other) => other.index == index;
}
class B {
B(this.index);
final int index;
}
Donc tu peux faire comme ça :
class A {
A(this.index);
final int index;
@override
bool operator ==(covariant A other) => other.index == index;
}
Vous devez utiliser covariant
. Parce que l’objet surcharge le ==
opérateur.
ou tu peux
Type d’objet de test :
visitez : hash_and_equals
class A {
A(this.index);
final int index;
@override
bool operator ==(other) => other is A && (other.index == index);
@override
int get hashCode => index;
}
Pour étendre la réponse de Lars, vous pouvez également surcharger les opérateurs à l’aide de la syntaxe de la fonction en ligne.
class MyClass {
operator ==(MyClass o) => id == o.id;
}