Я всегда думал, что DirectCast()
был довольно недорогим, проницательным и запоминающимся, и видел его в основном как способ помочь мне с IntelliSense, например. в обработчиках событий:
Public Sub myObject_EventHandler(sender As Object, e As System.EventArgs)
'Explicit casting with DirectCast
Dim myObject As myClass = DirectCast(sender, myClass)
myObject.MyProperty = "myValue"
End Sub
Я понял, что это было лучше, очевидно, для меня как разработчик, но также и для скомпилированного кода и итоговой производительности, потому что он включал "раннее связывание", в отличие от...
Public Sub myObject_EventHandler(sender As Object, e As System.EventArgs)
'No casting at all (late binding)
myObject.MyProperty = "myValue"
End Sub
... который также компилируется и запускается, но использует "позднюю привязку", если я правильно понял термины. т.е. предполагая, что sender
фактически является объектом myClass
.
Что касается производительности, позднего/раннего связывания или чего-либо еще, каковы различия между самым первым фрагментом выше и следующим:
Public Sub myObject_EventHandler(sender As Object, e As System.EventArgs)
'Implicit casting via variable declaration
Dim myObject As myClass = sender
myObject.MyProperty = "myValue"
End Sub
Является ли явный вызов DirectCast()
полезным/вредным или не имеет значения после того, как компилятор оптимизировал код?