Я столкнулся со странной ситуацией. Приведенный ниже код завершается ошибкой, потому что удаленный объект все еще пытается получить доступ к вызывающей подпрограмме, даже если вызываемая подпрограмма установила переданному параметру новое значение.
Sub Foo(ByRef astream as Stream)
'do stuff
astream.Dispose()
astream = New MemoryStream()
End Sub
Sub Other()
Dim memstream as New MemoryStream()
Foo(CType(memstream, Stream))
memstream.Position = 0' <- FAILS with Object Disposed!
End Sub
Однако это удается:
Sub Foo(ByRef astream as MemoryStream)
'do stuff
astream.Dispose()
astream = New MemoryStream()
End Sub
Sub Other()
Dim memstream as New MemoryStream()
Foo(memstream)
memstream.Position = 0' <- This works now!
End Sub
Итак, почему первый не работает, когда задействован upcasting, а второй работает?
РЕДАКТИРОВАТЬ: Забыл упомянуть, что я использую июньскую Roslyn CTP для VS 2013 (на случай, если это ошибка).
Спасибо.