Tip turnare în Visual Basic. NET

furnizate de Molly Pell, Senior Systems Analyst

Visual Basic. NET oferă două opțiuni pentru turnare.

  • CType: aruncă sau convertește un tip într-un alt tip. Dacă tipurile nu se potrivesc, Se poate efectua constrângere.
  • DirectCast: aruncă un tip la un alt tip cu o performanță mai bună decât CType, dar nu efectuează constrângere dacă tipurile nu se potrivesc.

notă: CType include toate funcțiile de conversie VB. Acestea sunt CBool, CByte, CChar, CDate, CDec, CDbl, CInt, CLng, CObj, CShort, CSng și CStr.

principala diferență dintre cele două este că DirectCast funcționează numai dacă tipul specificat și tipul de execuție al expresiei sunt aceleași. Această diferență apare numai atunci când conversia de la un tip de obiect la un tip de valoare, sau unboxing o valoare.

de exemplu, următoarea operație DirectCast va eșua deoarece tipul în cutie al obiectului O nu este un număr întreg:

Dim O ca obiect = 1.5

Dim I Ca Integer = Directcast(o, Integer) ‘ provoacă o eroare de execuție.

Dim I Ca Integer = CType(o, Integer) ‘ nu provoacă o eroare de execuție.

operația DirectCast din acest exemplu, pe de altă parte, va reuși:

Dim O ca obiect = 1

Dim I Ca Integer = Directcast(o, Integer) ‘ reușește.

Dim i As Integer = CType(o, Integer) ‘ reușește, dar este mai lent decât directcast

atunci când se convertește de la un obiect la un tip de valoare sau unboxing, operatorul DirectCast are performanțe mai bune decât operatorul CType. Visual Basic .Net compiler generează patru linii de cod IL Pentru DirectCast. Cu toate acestea, utilizarea CType determină compilatorul Visual Basic.NET să genereze un apel către o metodă de conversie care este cu mult peste o sută de linii de cod IL. Această metodă, la rândul său, numește alte metode. În codul critic de performanță, diferența poate fi substanțială. Cu toate acestea, dacă este necesară coerciția, trebuie să utilizați în continuare operația CType sau să efectuați coerciția manual.

de exemplu:

Dim O ca obiect = 1.5

Dim f as Single = DirectCast ( o, Single) ‘Cast to the runtime type

Dim i As Integer = CType (f, Integer)’ CType este OK aici, deoarece acest
‘ cast nu dezactivează ‘f’

concluzie

când tastați turnarea de la un tip de obiect la un tip de valoare sau unboxing, ar trebui mai întâi să determinați dacă este necesară coerciția de tip. Dacă nu este necesară nicio constrângere (adică tipul în cutie al valorii este același cu tipul specificat în expresia cast), utilizați expresia DirectCast pentru a crește performanța aplicației.

acest sfat și mai detectat pentru dvs. cu total. net Analyzer! Consultați FMS. Net Analyzer pentru mai multe informații.