Sdílet prostřednictvím


Řešení potíží s proměnnými v jazyce Visual Basic

Tato stránka obsahuje seznam některých běžných problémů, ke kterým může dojít při práci s proměnnými v jazyce Visual Basic.

Nelze získat přístup ke členům objektu

Pokud se váš kód pokusí o přístup k vlastnosti nebo metodě objektu, existují dva možné chybové výsledky:

  • Kompilátor může vygenerovat chybovou zprávu, pokud deklarujete proměnnou objektu jako určitý typ a pak odkazujete na člen nedefinovaný tímto typem.

  • Spuštění MemberAccessException nastane, když objekt přiřazený k proměnné objektu nezpřístupní člena, ke kterému se váš kód pokouší získat přístup. V případě proměnné objektového datového typu můžete tuto výjimku získat také v případě, že člen není Public. Je to proto, že pozdní vazba umožňuje přístup pouze k členům Public .

Když příkaz Option Strict nastaví kontrolu Ontypu , může proměnná objektu přistupovat pouze k metodám a vlastnostem třídy, pomocí které ji deklarujete. Toto dokládá následující příklad.

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

V tomto příkladu p lze použít pouze členy Object samotné třídy, které nezahrnují Left vlastnost. Na druhé straně q byl deklarován jako typ Label, takže může použít všechny metody a vlastnosti Label třídy v System.Windows.Forms oboru názvů.

Správný přístup

Chcete-li získat přístup ke všem členům objektu určité třídy, deklarujte proměnnou objektu typu této třídy, pokud je to možné. Pokud to nemůžete udělat, například pokud neznáte typ objektu v době kompilace, musíte nastavit Option StrictOff a deklarovat proměnnou na datový typ objektu. To umožňuje přiřadit k proměnné objekty libovolného typu a měli byste podniknout kroky k zajištění, aby aktuálně přiřazený objekt byl přijatelného typu. K tomuto určení můžete použít operátor TypeOf .

Jiné komponenty nemají přístup k proměnné

V názvech jazyka Visual Basic se nerozlišují malá a velká písmena. Pokud se dva názvy liší pouze v písmenech abecedy, kompilátor je interpretuje jako stejný název. Například zvažuje ABC a abc odkazovat na stejný deklarovaný prvek.

Modul CLR (Common Language Runtime) ale používá vazby s rozlišováním velkých a malých písmen . Proto když vytvoříte sestavení nebo knihovnu DLL a zpřístupníte je jiným sestavením, vaše názvy již nerozlišují malá a velká písmena. Pokud například definujete třídu s elementem s názvem ABCa další sestavení využívají vaši třídu prostřednictvím modulu CLR (Common Language Runtime), musí označovat element jako ABC. Pokud následně znovu zkompilujete třídu a změníte název elementu na abc, ostatní sestavení používající vaši třídu již nebudou mít přístup k ho elementu. Proto při vydání aktualizované verze sestavení byste neměli měnit písmena písmena u veřejných prvků.

Další informace najdete v tématu Common Language Runtime.

Správný přístup

Pokud chcete ostatním komponentám povolit přístup k proměnným, zacházejte s jejich názvy, jako by se rozlišovala malá a malá písmena. Při testování třídy nebo modulu se ujistěte, že ostatní sestavení jsou svázající se s proměnnými, které očekáváte. Jakmile publikujete komponentu, neprovedáte žádné změny existujících názvů proměnných, včetně změny jejich případů.

Používá se špatná proměnná

Pokud máte více než jednu proměnnou se stejným názvem, kompilátor jazyka Visual Basic se pokusí přeložit každý odkaz na tento název. Pokud mají proměnné jiný obor, kompilátor přeloží odkaz na deklaraci s nejužším oborem. Pokud mají stejný obor, překlad selže a kompilátor signalizuje chybu. Další informace najdete v tématu Odkazy na deklarované elementy.

Správný přístup

Nepoužívejte proměnné se stejným názvem, ale jiným oborem. Pokud používáte jiná sestavení nebo projekty, vyhněte se co nejvíce používání názvů definovaných v těchto externích komponentách. Pokud máte více než jednu proměnnou se stejným názvem, nezapomeňte kvalifikovat každý odkaz na ni. Další informace najdete v tématu Odkazy na deklarované elementy.

Viz také