En plus Jon réponse qui explique le C#, côté des choses, voici ce que VB n':
Dans visual basic avec Option Strict On
, une comparaison via =
toujours des tests de valeur de l'égalité et de jamais de référence à l'égalité. En fait, votre code n'a même pas compiler une fois que vous passez Option Strict On
car System.Object
ne définit pas un Operator=
. Vous devriez toujours avoir cette option, il attrape les bugs de manière plus efficace qu'un venus flytrap (bien que dans votre cas particulier, ce laxisme ne fait la bonne chose).1
En fait, avec Option Strict On
, VB se comporte de façon encore plus stricte que celle de C#: C#, a == b
soit déclenche un appel à SomeType.operator==(a, b)
ou, si cela n'existe pas, appelle de référence de la comparaison d'égalité (ce qui est équivalent à l'appel de object.ReferenceEquals(a, b)
).
En VB d'autre part, la comparaison a = b
toujours invoque l'opérateur d'égalité.2 Si vous souhaitez utiliser la référence de comparaison d'égalité, vous devez utiliser a Is b
(ce qui est, encore une fois, le même que l' Object.ReferenceEquals(a, b)
).
1) Voici une bonne indication pourquoi l'utilisation d' Option Strict Off
est une mauvaise idée: j'ai utilisé VB.NET pour près d'une décennie avant .NET version officielle jusqu'à il y a quelques années, et j'ai absolument aucune idée de ce qu' a = b
avec Option Strict Off
. Il fait ce genre de comparaison d'égalité, mais qu'est-ce qui se passe et pourquoi, aucune idée. C'est plus complexe que le C#' dynamic
fonctionnalité, cependant (car qui s'appuie sur une API documentée). Voici ce que le MSDN dit:
Parce qu' Option Strict On
offre typage fort, empêche involontaire conversions de type avec perte de données, il interdit la liaison tardive, et améliore les performances, son utilisation est fortement recommandée.
2) Jon a mentionné une exception près, les cordes, où l'égalité comparaison n'des choses un peu plus pour des raisons de rétro-compatibilité.