2009-05-14 7 views

Répondre

4

Si vous utilisez Object, les clients doivent transmettre quelque chose qui prend en charge IUnknown ou IDispatch - en bref le paramètre doit être un objet. Si vous utilisez Variant, les clients peuvent transmettre n'importe quoi.

+1

Pour ajouter à cela: si vous choisissez Variant, vous devez également vous soucier de la possibilité que le paramètre soit 0, Null, Empty, vbNullString ou Nothing ;-) –

+0

@Mike Spross: bon commentaire. En tant que pédantaholic je dois observer que si vous en faites un objet, les clients peuvent également passer dans Nothing. – MarkJ

+0

@MarkJ: Très vrai. J'essayais plus de montrer que Variant a beaucoup plus de variété pour décider si quelque chose existe ou non, alors que Object ne définit qu'une façon d'exprimer la non-existence de quelque chose. En particulier, le fait qu'un Variant non assigné par défaut à Empty peut détruire le havoc sur le code qui vérifie IsNull sur les paramètres mais oublie de faire des vérifications IsEmpty. Nous avons quelques classes qui utilisent les propriétés Variant uniquement pour que l'appelant puisse passer Null, mais elles n'ont pas été codées pour vérifier Empty, ce qui a causé des choses bizarres quand l'appelant n'a pas explicitement Null les propriétés. –

Questions connexes