late binding   zodpovězená otázka

VB.NET

Zdravím, přidal jsem do projektu třídu a když jsem s ní chtěl pracovat došel jsem k chybě: " Option strict on disallows late binding" a nevím co to znamená.

Díky za pomoc.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zdravím.

Môžem pomôcť s prekladom, ale prečo to vypisuje asi nepoviem. Chcelo by to viac informácií, možno nejaký kód. Preklad je "Možnosť neskoršieho prepojenia je prísne zakázaná."

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vím, že jsem to již kdysi dávno taky řešil, ale už si za Boha nevzpomenu...

Zkuste nahodit kousek kódu, kde máte problém.

Jediné, co si pamatuji, tak buď na fórech radili, že je možno uvedenou kontrolu při kompilaci vypnout (což jsem nepovažoval za ideální), a podařilo se mi to nějak eliminovat tak, že jsem předem danou proměnnou (u které byl problém) řádně deklaroval. Ale to už si vzpomínám skutečně pouze velice mlhavě.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Chtělo by to skutečně ukázku toho závadného kódu.

Late Binding je způsob přiřazování konkrétních objektů do obecných proměnných a následné práce s tím, což se obecně výrazně nedoporučuje.

Následující příklad ukazuje Late Binding v praxi. Je nutné mít ve vlastnostech projektu nastaveno Option Strict Off.

Dim objekt As Object
objekt = New FileInfo("C:\WINDOWS\notepad.exe")
Dim velikost As Long = objekt.Length

S proměnnou objekt (která samozřejmě nemá vlastnost Length) pracujeme jako by to nebyl Object ale FileInfo - toto se nazývá Late Binding. Mezi hlavní nedostatky tohoto způsobu patří nemožnost optimalizace kódu kompilátorem.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Máte zapnuto v kompilátoru Option Strict (nebo jste to napsal nahoru do souboru, ve kterém se problém vyskytuje).

Jak již psal kolega Linhart, přiřadíte nějaký objekt do proměnné typu Object (anebo na nějakého předka dané třídy, pokud používáte dědičnost) a pak napíšete proměnná.vlastnost, kde vlastnost je sice vlastnost, kterou přiřazený objekt mít pravděpodobně bude, ale kompilátor to neví a proto vyhodí chybu, pokud je zapnuto Option Strict.

Nejjednodušší je použít CType a přetypovat objekt na to, co v něm má být:

Dim a As Object = New FileInfo("C:\WINDOWS\notepad.exe")
'tohle je Late Binding, používáte vlastnost Length, kterou ale datový typ Object nemá
velikost = a.Length     
'takhle je to lepší, nejdříve převedete a na typ FileInfo a pak zjistíte velikost souboru (pokud se převod nepodaří, vyhodí to chybu, ale to platilo i u předchozího řádku)
velikost = CType(a, FileInfo).Length   

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky za radu vyzkouším to.

Jan

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback