Partager via


BC42025 : accès d’un membre partagé, d’un membre de constante, d’un membre enum ou d’un type imbriqué via une instance ; l’expression qualifiante ne sera pas évaluée

Une variable d’instance d’une classe ou d’une structure est utilisée pour accéder à une variable, une propriété, une procédure ou un événement Shared définis dans cette classe ou structure. Cet avertissement peut également se produire si une variable d’instance est utilisée pour accéder à un membre implicitement partagé d’une classe ou d’une structure, comme une constante ou une énumération, ou une classe ou une structure imbriquées.

L’objectif du partage d’un membre est de créer une seule copie de ce membre et de mettre cette copie unique à la disposition de chaque instance de la classe ou de la structure dans laquelle elle est déclarée. Dans le cadre de cet objectif, il convient d’accéder à un membre Shared par le biais du nom de sa classe ou de sa structure, plutôt que par le biais d’une variable qui contient une instance individuelle de cette classe ou structure.

L’accès à un membre Shared via une variable d’instance peut rendre votre code plus difficile à comprendre en occultant le fait que le membre est Shared. En outre, si cet accès fait partie d’une expression qui effectue d’autres actions, telles qu’une procédure Function qui retourne une instance du membre partagé, Visual Basic contourne l’expression et toute autre action qu’il effectuerait autrement.

Pour plus d’informations et pour obtenir un exemple, consultez Partagé.

Par défaut, ce message est un avertissement. Pour plus d’informations sur le masquage des avertissements ou le traitement des avertissements en tant qu’erreurs, consultez Configuring Warnings in Visual Basic.

ID d’erreur : BC42025

Exemple

L’exemple suivant génère l’erreur bc42025 :

Public Class TestClass
    Public Shared Sub SayHello()
        Console.WriteLine("Hello")
    End Sub
End Class

Module Program
    Public Sub Main()
        Dim tc As New TestClass()
        tc.SayHello() ' BC42025.
    End Sub
End Module

Pour traiter cet avertissement

Utilisez le nom de la classe ou de la structure qui définit le membre Shared pour y accéder, comme illustré dans l’exemple suivant :

Public Class TestClass
    Public Shared Sub SayHello()
        Console.WriteLine("Hello")
    End Sub
End Class

Module Program
    Public Sub Main()
        TestClass.SayHello()
    End Sub
End Module

Notes

Soyez vigilant concernant les effets de l’étendue lorsque deux éléments de programmation ont le même nom. Dans l’exemple précédent, si vous déclarez une instance à l’aide de Dim testClass As TestClass = Nothing, le compilateur traite un appel à testClass.SayHello() comme un accès de la méthode via le nom de la classe, et aucun avertissement ne se produit.

Voir aussi