Typ odlewania w Visual Basic. NET

Dostarczone przez Molly Pell, starszego analityka Systemów

Visual Basic. Net zapewnia dwie opcje odlewania.

  • CType: rzuca lub konwertuje jeden typ na inny. Jeśli typy nie pasują, można wykonać przymus.
  • DirectCast: rzuca jeden typ na inny z lepszą wydajnością niż CType, ale nie wykonuje przymusu, jeśli typy nie pasują.

Uwaga: CType zawiera wszystkie funkcje konwersji VB. Są to CBool, CByte, Cchar, CDate, CDec, CDbl, CInt, CLng, CObj, CShort, CSng i CStr.

główna różnica między nimi polega na tym, że DirectCast działa tylko wtedy, gdy określony typ i typ wyrażenia w czasie wykonywania są takie same. Różnica ta pojawia się tylko podczas konwersji z typu obiektu na typ wartości lub rozpakowywania wartości.

na przykład następująca operacja DirectCast nie powiedzie się, ponieważ Typ pudełkowy obiektu O nie jest liczbą całkowitą:

Dim O As Object = 1.5

Dim i As Integer = DirectCast(O, Integer) ’ powoduje błąd w czasie pracy.

Dim i As Integer = ctype ( O, Integer) ’ nie powoduje błędu w czasie pracy.

z kolei operacja DirectCast w tym przykładzie powiedzie się:

Dim O As Object = 1

Dim i As Integer = DirectCast(O, Integer) ’ powiedzie się.

Dim i As Integer = ctype(O, Integer) ’ powiedzie się, ale jest wolniejszy niż DirectCast

podczas konwersji z obiektu na typ wartości lub rozpakowywania, Operator DirectCast ma lepszą wydajność niż operator CType. Visual Basic .NET kompilator generuje cztery linie kodu IL dla DirectCast. Jednak użycie CType powoduje, że kompilator Visual Basic.NET generuje wywołanie metody konwersji, która ma ponad sto linii kodu IL. Ta metoda z kolei wywołuje inne metody. W kodzie krytycznym dla wydajności różnica może być znaczna. Jeśli jednak przymus jest konieczny, nadal musisz użyć operacji CType lub wykonać przymus ręcznie.

na przykład:

Dim o As Object = 1.5

Dim F jako Single = DirectCast ( o, Single) 'Cast do typu runtime

Dim i jako Integer = ctype(f, Integer)’ CType jest tutaj OK, ponieważ ten
’ cast Nie rozpakowuje 'f’

wniosek

podczas przerzucania typu z typu obiektu na typ wartości lub rozpakowywania, należy najpierw określić, czy konieczne jest wymuszenie typu. Jeśli nie jest konieczne wymuszanie (tzn. Typ pudełkowy wartości jest taki sam jak typ określony w wyrażeniu cast), użyj wyrażenia DirectCast, aby zwiększyć wydajność aplikacji.

ta wskazówka i więcej wykrytych dla Ciebie Dzięki Total. net Analyzer! Więcej informacji można znaleźć w FMS.NET Analyzer.