Felsöka variabler i Visual Basic

På den här sidan visas några vanliga problem som kan uppstå när du arbetar med variabler i Visual Basic.

Det går inte att komma åt medlemmar i ett objekt

Om koden försöker komma åt en egenskap eller metod för ett objekt finns det två möjliga felresultat:

  • Kompilatorn kan generera ett felmeddelande om du deklarerar att objektvariabeln är av en viss typ och sedan refererar till en medlem som inte har definierats av den typen.

  • En körningstid MemberAccessException inträffar när objektet som tilldelats till en objektvariabel inte exponerar medlemmen som koden försöker komma åt. När det gäller en variabel av objektdatatyp kan du också få det här undantaget om medlemmen inte Publicär . Det beror på att sen bindning endast tillåter åtkomst till Public medlemmar.

När alternativet Strict Statement anger typkontroll Onkan en objektvariabel endast komma åt metoderna och egenskaperna för klassen som du deklarerar den med. Följande exempel illustrerar detta.

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

I det här exemplet p kan endast använda medlemmarna i Object själva klassen, som inte inkluderar Left egenskapen. Å andra sidan q har deklarerats vara av typen Label, så att den kan använda alla metoder och egenskaper Label för klassen i System.Windows.Forms namnområdet.

Rätt metod

Om du vill kunna komma åt alla medlemmar i ett objekt i en viss klass deklarerar du att objektvariabeln är av den typen av klass när det är möjligt. Om du inte kan göra detta, till exempel om du inte känner till objekttypen vid kompileringstiden, måste du ange Option Strict till Off och deklarera variabeln som objektdatatyp. På så sätt kan objekt av valfri typ tilldelas till variabeln, och du bör vidta åtgärder för att säkerställa att det tilldelade objektet är av en acceptabel typ. Du kan använda TypeOf-operatorn för att göra den här bestämningen.

Andra komponenter kan inte komma åt variabeln

Visual Basic-namn är skiftlägesokänsliga. Om två namn endast skiljer sig åt i alfabetisk ordning tolkar kompilatorn dem som samma namn. Den tar till exempel hänsyn ABC till och abc refererar till samma deklarerade element.

CLR (Common Language Runtime) använder dock skiftlägeskänslig bindning. När du skapar en sammansättning eller en DLL och gör den tillgänglig för andra sammansättningar är dina namn därför inte längre skiftlägesokänsliga. Om du till exempel definierar en klass med ett element med namnet ABC, och andra sammansättningar använder klassen via common language runtime, måste de referera till elementet som ABC. Om du därefter kompilerar om din klass och ändrar elementets namn till abckan de andra sammansättningarna som använder klassen inte längre komma åt elementet. När du släpper en uppdaterad version av en sammansättning bör du därför inte ändra alfabetiska skiftläge för offentliga element.

Mer information finns i Common Language Runtime.

Rätt metod

Om du vill tillåta andra komponenter att komma åt dina variabler behandlar du deras namn som om de vore skiftlägeskänsliga. När du testar din klass eller modul kontrollerar du att andra sammansättningar binder till de variabler som du förväntar dig. När du har publicerat en komponent ska du inte göra några ändringar i befintliga variabelnamn, inklusive att ändra deras ärenden.

Fel variabel som används

När du har fler än en variabel med samma namn försöker Visual Basic-kompilatorn matcha varje referens till det namnet. Om variablerna har ett annat omfång löser kompilatorn en referens till deklarationen med det smalaste omfånget. Om de har samma omfång misslyckas lösningen och kompilatorn signalerar ett fel. Mer information finns i Referenser till deklarerade element.

Rätt metod

Undvik att använda variabler med samma namn men olika omfång. Om du använder andra sammansättningar eller projekt bör du undvika att använda namn som definierats i dessa externa komponenter så mycket som möjligt. Om du har fler än en variabel med samma namn ska du vara säker på att du kvalificerar varje referens till den. Mer information finns i Referenser till deklarerade element.

Se även