Risoluzione dei problemi relativi alle variabili in Visual Basic
Aggiornamento: novembre 2007
In questa pagina sono elencati alcuni problemi comuni che possono verificarsi durante l'utilizzo delle variabili in Visual Basic.
Impossibile accedere ai membri di un oggetto
Se il codice tenta di accedere alla proprietà o al metodo di un oggetto, possono verificarsi due diverse situazioni di errore:
È possibile che venga generato un messaggio di errore dal compilatore se si dichiara che la variabile dell'oggetto debba essere di un tipo specifico e si fa quindi riferimento a un membro non definito da quel tipo.
È possibile che in fase di esecuzione si verifichi una MemberAccessException quando il membro al quale il codice sta cercando di accedere non viene esposto dall'oggetto assegnato a una variabile oggetto. Nel caso di una variabile di Tipo di dati Object, questa eccezione può anche verificarsi se il membro non è Public. Ciò accade in quanto l'associazione tardiva consente l'accesso solo ai membri Public.
Quando con l'Istruzione Option Strict viene impostato il controllo di tipo su On, la variabile oggetto sarà in grado di accedere solo ai metodi e alle proprietà della classe con la quale lo si dichiara. Questa condizione è illustrata nell'esempio che segue.
Option Strict On
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ò utilizzare soltanto i membri della classe Object, che non includono la proprietà Left. D'altra parte, la variabile q è stata dichiarata di tipo Label e può quindi utilizzare 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, è necessario dichiarare, quando possibile, che la variabile oggetto sia del tipo di quella classe. Se non è possibile, ad esempio se al momento della compilazione non si conosce il tipo di oggetto, è necessario impostare Option Strict su Off e dichiarare la variabile con il Tipo di dati Object. In questo modo è possibile assegnare gli oggetti di ogni tipo alla variabile e non dovrebbe essere necessario prendere precauzioni per accertarsi che l'oggetto attualmente assegnato sia di un tipo accettabile. A tal fine, è possibile utilizzare Operatore TypeOf (Visual Basic).
Accesso alla variabile non consentito da parte di altri componenti
I nomi di Visual Basic non distinguono la differenza tra maiuscole e minuscole. Se i due nomi differiscono solo nelle maiuscole e minuscole, il compilatore li interpreta come se fossero lo stesso nome ABC e abc, ad esempio, sono considerati come riferimenti allo stesso elemento dichiarato.
Nel Common Language Runtime, tuttavia, viene utilizzata l'associazione con distinzione tra maiuscole e minuscole. Di conseguenza, quando si genera un assembly o una DLL e li si rende disponibili per altri assembly, per i nomi utilizzati verrà fatta distinzione tra maiuscole e minuscole. Se ad esempio si definisce una classe con un elemento denominato ABC e altri assembly utilizzano tale classe tramite il Common Language Runtime, è necessario che gli assembly facciano riferimento all'elemento come ABC. Se, successivamente, la classe viene ricompilata e il nome dell'elemento viene modificato in abc, gli altri assembly che utilizzano la classe non potranno più accedere all'elemento. Di conseguenza, quando si rilascia una versione aggiornata di un assembly, è preferibile non modificare le maiuscole e le minuscole degli elementi pubblici.
Per ulteriori informazioni, vedere Common Language Runtime.
Approccio corretto
Per consentire ad altri componenti di accedere alla variabili, considerarne i nomi come se facessero distinzione tra maiuscole e minuscole. Quando si esegue la verifica della classe o del modulo, accertarsi che gli altri assembly stiano effettuando l'associazione alle variabili previste. Dopo aver pubblicato un componente, non effettuare alcuna modifica ai nomi delle variabili esistenti, compresa la modifica delle maiuscole o minuscole.
Variabile utilizzata non corretta
Se sono presenti più variabili con lo stesso nome, il compilatore di Visual Basic tenta di risolvere ogni riferimento a quel nome. Se le variabili hanno un ambito diverso, il compilatore risolve un riferimento alla dichiarazione con l'ambito più ristretto. Se invece hanno lo stesso ambito, la risoluzione non riesce e il compilatore segnala un errore. Per ulteriori informazioni, vedere Risoluzione di un riferimento quando più variabili hanno lo stesso nome.
Approccio corretto
Evitare di utilizzare variabili con lo stesso nome ma ambito diverso. Se si utilizzano altri assembly o progetti, evitare per quanto possibile di utilizzare qualsiasi nome definito in quei componenti esterni. Se esiste più di una variabile con lo stesso nome, accertarsi di qualificare ogni riferimento ad essa. Per ulteriori informazioni, vedere Procedura: distinguere tra due elementi con lo stesso nome.
Vedere anche
Attività
Procedura: accedere ai membri di un oggetto
Procedura: determinare a quale tipo fa riferimento una variabile oggetto
Concetti
Dichiarazione di variabili in Visual Basic
Variabili oggetto in Visual Basic
Dichiarazione di variabili oggetto
Risoluzione di un riferimento quando più variabili hanno lo stesso nome