Modifications avec rupture dans Visual Basic 2010
Le tableau suivant répertorie toutes les modifications susceptibles d'empêcher une application créée dans Visual Basic 2008 d'être compilée dans Visual Basic 2010, ou susceptible de modifier son comportement au moment de l'exécution.
Catégorie |
Problème |
Description |
---|---|---|
Inférence de type de tableau |
Les règles d'inférence pour les initialiseurs de tableau ont été modifiées. Par exemple, Dim x() = {1, 2, 3} déduit le type Integer. Dim x() = {1, 2.2, "3"} provoque une erreur du compilateur lorsque Option Strict a la valeur On. |
Dans Visual Basic 2008, lorsque vous déclarez une variable tableau mais omettez le type de l'élément, le compilateur assume qu'il s'agit du type Object. Visual Basic 2010 introduit l'inférence pour les types d'éléments de tableau et déduit le type d'élément comme étant le type dominant du littéral de tableau. S'il n'existe pas de type dominant, le type Object est utilisé par défaut. Dans ce cas, si Option Strict a la valeur On, une erreur de compilateur se produit. Pour plus d'informations, consultez Tableaux dans Visual Basic. |
Conflits d'attribution de noms |
Les types figurant dans les espaces de noms importés au niveau du fichier ont priorité sur les types figurant dans les espaces de noms importés au niveau du projet. |
Si deux espaces de noms contiennent chacun un type avec le même nom et si un type se trouve dans un espace de noms importé au niveau du projet et l'autre type de même nom se trouve dans un espace de noms importé au niveau du fichier, Visual Basic 2010 crée une liaison avec le type figurant dans l'espace de noms importé au niveau du fichier. Les versions antérieures créaient une liaison avec le type figurant dans l'espace de noms importé au niveau du projet. Pour plus d'informations, consultez Imports, instruction (espace de noms et type .NET). |
Mots clés de requête en tant qu'identificateurs |
L'utilisation d'un mot clé de requête en tant qu'identificateur peut produire des résultats inattendus. |
Le compilateur Visual Basic accepte des mots clés en tant que noms d'identificateurs dans différents contextes. En raison des nouvelles règles de continuation de ligne implicite ajoutées dans Visual Basic 2010, une erreur peut se produire si vous utilisez un mot clé comme nom d'élément dans une requête LINQ qui omet des caractères de continuation de ligne. L'exemple suivant utilise le mot clé Aggregate comme nom d'identificateur. Si l'identificateur aggregate suit immédiatement une requête, il est considéré comme partie intégrante de cette requête en raison des règles de continuation de la ligne implicite pour les clauses de requête. Dans cet exemple, cela provoque une erreur du compilateur.
Afin de vous assurer qu'une ligne n'est pas incluse implicitement dans la ligne de code précédente, ajoutez un saut de ligne supplémentaire avant la ligne de code, comme indiqué dans l'exemple suivant.
Pour plus d'informations sur la continuation de ligne implicite, consultez Instructions dans Visual Basic. |
Modules |
Les modules sont compilés en tant que MustInherit. |
Les modules sont désormais compilés en tant que MustInherit. Cela n'affecte pas le comportement des modules, mais peut affecter le code qui utilise la réflexion pour examiner les types créés par l'instruction Visual Basic Module. Pour plus d'informations, consultez Module, instruction. |
Expressions lambda |
Les expressions lambda anonymes génèrent des types uniques. |
Le caractère unique des types délégués anonymes générés pour les expressions lambda est à présent garanti. Cela peut affecter le code qui évalue l'égalité des types des délégués anonymes, tel que le code dans l'exemple suivant.
Pour plus d'informations, consultez Expressions lambda (Visual Basic). |
Variance dans les interfaces génériques |
Les interfaces génériques peuvent introduire une ambiguïté. |
Visual Basic 2010 prend en charge la variance (covariance et contravariance) dans les interfaces génériques. Une erreur de type avertissement concernant des interfaces ambiguës peut se produire lorsque vous implémentez plusieurs interfaces et qu'une interface dérive d'une autre interface. Pour plus d'informations, consultez Variance dans les interfaces génériques (C# et Visual Basic). |
Méthodes d'extension |
Les méthodes locales sont préférées aux méthodes d'extension. |
Si une méthode d'extension est définie avec le même nom et les mêmes paramètres que ceux d'une méthode définie pour un type, le compilateur crée une liaison avec la méthode locale et non avec la méthode d'extension. Ce comportement corrige le comportement de liaison incorrect dans Visual Basic 2008. Pour plus d'informations, consultez Méthodes d'extension (Visual Basic). |
Types valeur Nullable |
Si vous testez un type valeur Nullable pour Nothing à l'aide de l'opérateur =, comme indiqué dans le code suivant, une erreur de compilateur se produit.
|
Si vous testez un type de valeur Nullable pour Nothing à l'aide de l'opérateur =, le résultat est False même si le type valeur Nullable est Nothing, ce qui n'est très probablement pas le résultat souhaité. Utilisez plutôt l'opérateur Is, comme indiqué dans l'exemple suivant.
|
Appel implicite de fonctions ou de propriétés sans paramètre |
Si une fonction ou une propriété retourne une valeur indexable telle qu'une chaîne ou un tableau, vous pouvez utiliser la syntaxe raccourcie pour faire référence à un élément de la valeur de retour par index uniquement s'il n'existe pas de surcharges pour la fonction ou la propriété. |
Prenons une fonction ou une propriété sans paramètre qui retourne une valeur indexable, comme indiqué dans l'exemple suivant.
Vous pouvez utiliser la syntaxe raccourcie pour faire référence à un élément de la valeur de retour par index comme illustré dans l'exemple suivant.
Visual Basic 2008 autorise cette syntaxe raccourcie pour les appels à liaison tardive même s'il existe des surcharges pour la fonction ou la propriété. Dans Visual Basic 2010, vous pouvez utiliser la syntaxe raccourcie pour faire référence à un élément de la valeur de retour par index uniquement s'il n'existe pas de surcharges pour la fonction ou la propriété. |
Contraintes Class |
La contrainte Class n'est plus utilisée par défaut. |
Visual Basic 2008 déduit la contrainte Class pour un paramètre générique s'il est contraint par un deuxième paramètre générique lui-même contraint par la contrainte Class. Visual Basic 2010 ne déduit plus qu'un paramètre générique « hérite » de la contrainte Class. Cela est dû au fait que le premier paramètre générique peut être instancié avec un type qui implémente une interface mais qui n'est pas une classe. Les interfaces satisfont la contrainte Class. Pour vous assurer qu'un paramètre générique est contraint en tant que classe, ajoutez la contrainte Class tel qu'indiqué dans l'exemple suivant.
Pour plus d'informations, consultez Types génériques en Visual Basic (Visual Basic). |
Méthodes de classes partielles |
Si une méthode comportant des paramètres génériques contraints est déclarée dans plusieurs classes partielles, toutes les déclarations de la méthode doivent avoir des contraintes identiques. |
Vous pouvez déclarer une méthode qui comporte des paramètres génériques dans plusieurs classes partielles. Dans Visual Basic 2008, le compilateur n'exige pas toujours que les contraintes appliquées aux paramètres génériques correspondent pour toutes les déclarations de la méthode. Visual Basic 2010 exige que toutes les déclarations de la méthode aient des contraintes identiques. Pour plus d'informations, consultez Types génériques en Visual Basic (Visual Basic). |
Arborescence de l'expression d'une expression lambda |
Suppression du boxing inutile des instances de types de paramètres génériques |
Dans Visual Basic 2008, à l'intérieur d'une arborescence de l'expression d'une expression lambda, si un type de paramètre générique est contraint par une interface, le fait d'appeler une méthode sur une instance de ce type entraîne toujours un boxing de cette instance. Dans Visual Basic 2010, l'instance ne fait l'objet d'un boxing que lorsque cela est nécessaire. Pour plus d'informations sur le boxing et l'unboxing, consultez Spécification du langage Visual Basic. |
Expression lambda et arborescence de l'expression |
Une arborescence de l'expression d'une expression lambda peut retourner une arborescence de l'expression d'une expression lambda. |
Dans Visual Basic 2008, si une expression lambda effectue un cast d'une expression lambda en arborescence de l'expression, le compilateur n'exécute pas le cast dans certains cas. Le compilateur Visual Basic 2010 effectue un cast correct des expressions lambda en arborescences d'expressions si le cast se produit dans une expression lambda. |
Voir aussi
Concepts
Nouveautés de Visual Basic 2010