Share via


Comparaison entre types nommés et types anonymes (Visual Basic)

Le format que vous utilisez pour déclarer une instance d'un type anonyme ressemble à celui que vous utilisez lorsque vous déclarez une instance d'un type nommé à l'aide d'un initialiseur d'objet. Le résultat présente toutefois des différences importantes.

Déclarations

Dans les exemples suivants, product1 est une instance d'un type anonyme et product2 une instance de classe Product. Ces deux déclarations utilisent une liste d'initialisation dans leurs déclarations. La seule différence syntaxique entre les deux déclarations est qu'aucun type de données n'est spécifié après New pour product1. Cela en fait un type anonyme.

' Variable product1 is an instance of an anonymous type.
Dim product1 = New With {.Name = "paperclips", .Price = 1.29}

La variable product1 est fortement typée en tant qu'instance de type anonyme. Le compilateur définit le type en fonction des propriétés spécifiées dans la déclaration. Le compilateur utilise Inférence de type local (Visual Basic) pour déterminer les types de données des propriétés des valeurs initiales que vous fournissez. Dans cet exemple, le type anonyme contient des propriétés Name et Price et leurs types sont déduits comme étant étantString et Double, respectivement.

Notes

Dans l'exemple précédent, aucune des propriétés n'est spécifiée comme propriétés de clé. Par conséquent, les propriétés ne jouent aucun rôle pour déterminer si deux instances du même type sont égales la valeur de code de hachage que prend l'instance. Toutefois, les valeurs des propriétés peuvent être modifiées, alors que les valeurs de propriétés de clé sont en lecture seule. Pour plus d'informations sur les propriétés de clé, consultez Types anonymes (Visual Basic).

Dans l'exemple suivant, product2 est fortement typé en tant qu'instance de la classe Product. Name et Price doivent être membres de la classe Product et leurs types doivent être compatibles avec les valeurs fournies dans la déclaration.

' Variable product2 is an instance of Product.
Dim product2 = New Product With {.Name = "paperclips", .Price = 1.29}

Pour plus d'informations, consultez Initialiseurs d'objets : types nommés et anonymes (Visual Basic).

Distinctions

La liste suivante compare d'autres aspects des deux déclarations :

  • L'inférence de type local détermine que product1 est une instance d'un type anonyme et que product2 est une instance de la classe Product. Il n'existe aucune clause As dans les deux déclarations, bien que pour product2, la clause As soit facultative.

    • Parce que les types anonymes ne possèdent pas de noms spécifiés, vous ne pouvez pas utiliser de clause As pour déclarer product1. Son type doit être déduit. Cela limite l'utilisation de types anonymes aux variables locales.

    • Comme product2 est une instance d'un type nommé, Product, vous pouvez la déclarer sans utiliser l'inférence de type à l'aide d'une clause As.

      Dim product2a As New Product With {.Name = "paperclips", .Price = 1.29}
      
  • Si un constructeur approprié est défini dans Product, product2 peut être déclaré et initialisé sans utiliser d'initialiseur d'objet.

    Dim product2b As New Product("paperclips", 1.29)
    

    La série suivante d'instructions a également le même effet.

    Dim product2c As New Product
    product2c.Name = "paperclips"
    product2c.Price = 1.29
    

    Aucune déclaration semblable n'est possible pour product1 parce que ses propriétés sont nommées et définies dans la liste d'initialiseurs elle-même.

  • Comme product1, product2 et leurs propriétés sont tous fortement typés, vous pouvez utiliser IntelliSense pour naviguer dans le code qui utilise l'un et l'autre des objets.

    Avertissement

    Le nom du type anonyme, généré par le compilateur, peut varier de compilation en compilation. Votre code ne doit pas utiliser ou reposer sur le nom d'un type anonyme, car ce nom est susceptible de changer lorsqu'un projet est recompilé.

Voir aussi

Tâches

Comment : déclarer une instance d'un type anonyme (Visual Basic)

Comment : déduire les types et les noms de propriétés dans des déclarations de types anonymes (Visual Basic)

Référence

Key (Visual Basic)

Concepts

Types anonymes (Visual Basic)

Inférence de type local (Visual Basic)