Condividi tramite


Risoluzione dei problemi relativi alle variabili in Visual Basic

Questa pagina elenca alcuni problemi comuni che possono verificarsi durante l'uso di variabili in Visual Basic.

Impossibile accedere ai membri di un oggetto

Se il codice tenta di accedere a una proprietà o metodo su un oggetto, possono verificarsi due diversi errori:

  • Il compilatore può generare un messaggio di errore se si dichiara la variabile oggetto con un tipo specifico e poi si fa riferimento a un membro che non è definito con quel tipo.

  • Un MemberAccessException della fase di esecuzione si verifica quando l'oggetto assegnato a una variabile oggetto non espone il membro a cui il codice tenta di accedere. Nel caso di una variabile di Object Data Type, è anche possibile ottenere questa eccezione se il membro non è Public. Questo perché l'associazione tardiva consente l'accesso solo ai membri Public .

Quando il Option Strict Statement imposta Onper il controllo del tipo, una variabile oggetto può accedere solo ai metodi e alle proprietà della classe con cui viene dichiarata. Questa condizione è illustrata nell'esempio seguente.

Dim p As Object = New System.Windows.Forms.Label
Dim q As System.Windows.Forms.Label = New System.Windows.Forms.Label
Dim j, k As Integer
' The following statement generates a compiler error.
j = p.Left
' The following statement retrieves the left edge of the label 
' in pixels.
k = q.Left

In questo esempio p può usare solo i membri della classe Object stessa, che non includono la proprietà Left . D'altra parte, q è stata dichiarata con il tipo Label, perciò può usare tutti i metodi e le proprietà della classe Label nello spazio dei nomi System.Windows.Forms .

Approccio corretto

Per poter accedere a tutti i membri di un oggetto di una determinata classe, dichiarare la variabile oggetto con il tipo di tale classe dove possibile. Se questo è non possibile, ad esempio quando non si conosce il tipo di oggetto in fase di compilazione, è necessario impostare Option Strict su Off e dichiarare la variabile come Object Data Type. In questo modo oggetti di qualsiasi tipo possono essere assegnati alla variabile, perciò occorre eseguire i passaggi necessari per assicurarsi che l'oggetto attualmente assegnato sia di un tipo accettabile. È possibile usare l'operatore TypeOf per effettuare questa determinazione.

Altri componenti non possono accedere alla variabile

I nomi di Visual Basic sono senza distinzione tra maiuscole e minuscole. Se due nomi differiscono solo nelle maiuscole, il compilatore li interpreta come un unico nome. Ad esempio, se si ha ABC e abc , il compilatore li interpreta come se facessero riferimento allo stesso elemento dichiarato.

Il Common Language Runtime (CLR) usa invece l'associazione che distingue fra maiuscole e minuscole . Perciò, quando si genera un assembly o una DLL e la si rende disponibile ad altri assembly, i nomi distinguono fra maiuscole e minuscole. Se ad esempio si definisce una classe con un elemento denominato ABCe altri assembly usano la classe mediante il Common Language Runtime, devono fare riferimento all'elemento come ABC. Se in seguito si ricompila la classe e si cambia il nome dell'elemento in abc, gli altri assembly che usano la classe non possono più accedere a quell'elemento. Pertanto, quando si rilascia una versione aggiornata di un assembly, non si devono modificare le maiuscole e le minuscole degli elementi pubblici.

Per altre informazioni, vedere Common Language Runtime.

Approccio corretto

Per consentire agli altri componenti di accedere alle variabili, trattare i loro nomi come se distinguessero fra maiuscole e minuscole. Quando si testa la classe o il modulo, assicurarsi che gli altri assembly si associno alle variabili giuste. Dopo aver pubblicato un componente, non apportare modifiche ai nomi delle variabili esistenti e neppure alla loro combinazione di maiuscole e minuscole.

Variabile usata non corretta

Quando si dispone di più variabili con lo stesso nome, il compilatore di Visual Basic tenta di risolvere ogni riferimento a tale nome. Se le variabili hanno un ambito diverso, il compilatore risolve il riferimento secondo la dichiarazione con l'ambito più ristretto. Se hanno lo stesso ambito, la risoluzione non riuscirà e il compilatore segnalerà un errore. Per altre informazioni, vedere References to Declared Elements.

Approccio corretto

Evitare l'uso di variabili con lo stesso nome ma un ambito diverso. Se si usano altri assembly o progetti, evitare il più possibile l'uso di nomi definiti in questi componenti esterni. Se si hanno più variabili con lo stesso nome, assicurarsi di qualificare ogni riferimento a esso. Per altre informazioni, vedere References to Declared Elements.

Vedi anche