BC42025: accesso a membro condiviso, membro costante, membro enumerazione o tipo annidato tramite un'istanza; l'espressione di qualificazione non verrà valutata

Una variabile di istanza di una classe o di una struttura viene utilizzata per accedere a una variabile, a una proprietà, a una routine o a un Shared evento definito in tale classe o struttura. Questo avviso può verificarsi anche se una variabile di istanza viene usata per accedere a un membro condiviso in modo implicito di una classe o di una struttura, ad esempio una costante o un'enumerazione o una classe o una struttura annidata.

Lo scopo della condivisione di un membro consiste nel creare una sola copia di tale membro e rendere disponibile tale singola copia a ogni istanza della classe o della struttura in cui viene dichiarata. È coerente con questo scopo per accedere a un Shared membro tramite il nome della relativa classe o struttura, anziché tramite una variabile che contiene una singola istanza di tale classe o struttura.

L'accesso a un Shared membro tramite una variabile di istanza può rendere il codice più difficile da comprendere nascondendo il fatto che il membro è Shared. Inoltre, se tale accesso fa parte di un'espressione che esegue altre azioni, ad esempio una Function routine che restituisce un'istanza del membro condiviso, Visual Basic ignora l'espressione e qualsiasi altra azione che altrimenti eseguirà.

Per altre informazioni e un esempio, vedere Condiviso.

Per impostazione predefinita, questo messaggio è un avviso. Per altre informazioni su come nascondere gli avvisi o considerare gli avvisi come errori, vedere Configurazione degli avvisi in Visual Basic.

ID errore: BC42025

Esempio

L'esempio seguente genera l'errore 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

Per risolvere questo avviso

Usare il nome della classe o della struttura che definisce il Shared membro per accedervi, come illustrato nell'esempio seguente:

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

Annotazioni

Ricevere un avviso per gli effetti dell'ambito quando due elementi di programmazione hanno lo stesso nome. Nell'esempio precedente, se si dichiara un'istanza usando Dim testClass As TestClass = Nothing, il compilatore considera una chiamata a testClass.SayHello() come accesso del metodo tramite il nome della classe e non viene generato alcun avviso.

Vedere anche