přetypování v jazyce Visual Basic .NET

Poskytována Molly Pell, Senior systémový Analytik

Visual Basic .NET poskytuje dvě možnosti pro odlévání.

  • CType: odlévá nebo převádí jeden typ na jiný typ. Pokud se typy neshodují, může být provedeno donucení.
  • DirectCast: vrhá jeden typ na jiný typ s lepším výkonem než CType, ale nevykonává nátlak, pokud se typy neshodují.

Poznámka: CType obsahuje všechny konverzní funkce VB. Tyto jsou CBool, CByte, CChar, CDate, CDec, CDbl, CInt, CLng, CObj, CShort, CSng, a CStr.

hlavní rozdíl mezi těmito dvěma je, že DirectCast funguje pouze v případě, že zadaný typ a typ běhu výrazu jsou stejné. Tento rozdíl se objeví pouze při převodu z typu objektu na typ hodnoty nebo při rozbalení hodnoty.

například, následující DirectCast operace se nezdaří, protože rámečku typ objektu O není celé číslo:

Dim O Objekt = 1.5

Dim I As Integer = DirectCast(O, Integer) ‚ Způsobí run-time error.

Dim i jako Integer = CType ( O, Integer) ‚ nezpůsobuje chybu run-time.

operace DirectCast v tomto příkladu bude naopak úspěšná:

Dim O jako Object = 1

Dim I jako Integer = DirectCast ( O, Integer) ‚ uspěje.

Dim I As Integer = CType(O, Integer) ‚ Uspěje, ale je pomalejší než DirectCast

Při převodu z objektu, na hodnotu typu, nebo unboxing, DirectCast operátor má lepší výkon než CType operátora. Vizuální Základ .NET compiler generuje čtyři řádky IL kódu pro DirectCast. Použití CType však způsobí, že kompilátor Visual Basic. Net vygeneruje volání na metodu převodu, která je více než sto řádků IL kódu. Tato metoda zase volá jiné metody. V kritickém kódu výkonu může být rozdíl podstatný. Pokud je však nutný nátlak, musíte stále používat operaci CType nebo provést nátlak ručně.

například:

Dim O jako objekt = 1.5

Dim f As Single = DirectCast(O, Single) ‚Obsazení runtime typ

Dim i As Integer = CType(f, Integer)‘ CType je v POŘÁDKU tady, protože to
‚ obsazení nemá unbox ‚f‘

Závěr

Při přetypování z objektu typu na hodnotu typu, nebo unboxing, nejprve byste měli určit, zda typ nátlaku je nutné. Pokud není nutný žádný nátlak (tj. typ hodnoty v rámečku je stejný jako typ uvedený ve výrazu cast), použijte výraz DirectCast pro zvýšení výkonu aplikace.

tento tip a více detekován pro vás s Total. net Analyzer! Viz FMS. Net Analyzer Pro více informací.