Skip to content

Dart prend-il en charge la surcharge de l’opérateur

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;
}



Articles Similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.