Megosztás a következőn keresztül:


Változók hibaelhárítása a Visual Basicben

Ez a lap felsorol néhány gyakori problémát, amelyek a Visual Basic változóinak használatakor fordulhatnak elő.

Nem lehet hozzáférni egy objektum tagjaihoz

Ha a kód egy objektumon lévő tulajdonsághoz vagy metódushoz próbál hozzáférni, két lehetséges hibaeredmény lehet:

  • A fordító hibaüzenetet tud generálni, ha az objektumváltozót egy adott típusnak deklarálja, majd az adott típus által nem definiált tagra hivatkozik.

  • Futásidő MemberAccessException akkor fordul elő, ha az objektumváltozóhoz rendelt objektum nem teszi elérhetővé azt a tagot, amelyhez a kód megpróbál hozzáférni. Objektum adattípusú változó esetén ez a kivétel akkor is előfordulhat, ha a tag nem Public. Ennek az az oka, hogy a késői kötés csak a tagok számára engedélyezi a Public hozzáférést.

Amikor az Option Strict Utasítás típusellenőrzést Onállít be, az objektumváltozó csak annak az osztálynak a metódusait és tulajdonságait érheti el, amellyel deklarálja. Az alábbi példa ezt szemlélteti.

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

Ebben a példában p csak magának az osztálynak a Object tagjait használhatja, amelyek nem tartalmazzák a tulajdonságot Left . A típust viszont típusként deklarálták, q így a névtérben System.Windows.Forms lévő osztály összes metódusát és tulajdonságát Label használhatja.Label

Helyes megközelítés

Ha egy adott osztály objektumának összes tagját el szeretné érni, deklarálja az objektumváltozót az adott osztály típusának, ha lehetséges. Ha ezt nem tudja megtenni, például ha nem ismeri az objektumtípust a fordításkor, a változót az Objektum adattípus értékére Off kell állítaniaOption Strict, és deklarálnia kell. Ez lehetővé teszi bármilyen típusú objektum hozzárendelését a változóhoz, és lépéseket kell tennie annak biztosítására, hogy a jelenleg hozzárendelt objektum elfogadható típusú legyen. Ezt a meghatározást a TypeOf operátorral teheti meg.

Más összetevők nem férnek hozzá a változóhoz

A Visual Basic-nevek megkülönböztetik a kis- és nagybetűket. Ha két név csak betűrendben különbözik, a fordító ugyanazt a nevet értelmezi. Például ugyanazt a deklarált elemet veszi figyelembe ABC , és abc arra hivatkozik.

A közös nyelvi futtatókörnyezet (CLR) azonban megkülönbözteti a kis- és nagybetűk kötését . Ezért amikor létrehoz egy szerelvényt vagy egy DLL-t, és elérhetővé teszi azt más szerelvények számára, a nevek már nem érzéketlenek a kis- és nagybetűk számára. Ha például definiál egy osztályt egy nevű ABCelemet, és más szerelvények a közös nyelvi futtatókörnyezeten keresztül használják az osztályt, akkor az elemre a következőként ABCkell hivatkoznia: . Ha ezt követően újrafordozza az osztályt, és az elem nevét a következőre abcmódosítja, az osztályt használó többi szerelvények már nem férhetnek hozzá az elemhez. Ezért a szerelvény frissített verziójának kiadásakor nem szabad módosítani a nyilvános elemek betűrendes esetét.

További információt a Common Language Runtime (Common Language Runtime) című témakörben talál.

Helyes megközelítés

Ha engedélyezni szeretné, hogy más összetevők hozzáférjenek a változókhoz, a nevüket úgy kell kezelni, mintha kis- és nagybetűk lennének. Az osztály vagy a modul tesztelése során győződjön meg arról, hogy más szerelvények is kötődnek a várt változókhoz. Miután közzétett egy összetevőt, ne módosítsa a meglévő változóneveket, beleértve az esetek módosítását is.

Helytelen változó van használatban

Ha több azonos nevű változóval rendelkezik, a Visual Basic fordítója megpróbálja feloldani az adott névre mutató hivatkozásokat. Ha a változók hatóköre eltérő, a fordító feloldja a deklarációra mutató hivatkozást a legszűkebb hatókörrel. Ha azonos hatókörrel rendelkeznek, a megoldás meghiúsul, és a fordító hibát jelez. További információ: Deklarált elemekre mutató hivatkozások.

Helyes megközelítés

Kerülje az azonos nevű, de eltérő hatókörű változók használatát. Ha más szerelvényeket vagy projekteket használ, ne használjon a külső összetevőkben definiált neveket a lehető legnagyobb mértékben. Ha több azonos nevű változóval rendelkezik, győződjön meg arról, hogy minden hivatkozást megfeleltet. További információ: Deklarált elemekre mutató hivatkozások.

Lásd még