이상한 상황이 발생했습니다. 호출 된 하위가 전달 된 param을 새 값으로 설정 했더라도 폐기 된 객체가 여전히 호출 하위에서 액세스하려고하기 때문에 아래 코드는 실패합니다. upcasting가 관련된 경우VB.NET Upcasted ByRef는 ByVal처럼 동작합니다.
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
그래서, 왜 첫 번째는 작동하지 않으며, 두 번째 작품 :
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
그러나 이것은 성공?
EDIT : VS 2013 용 June Roslyn CTP를 사용 중입니다 (버그가있는 경우).
감사합니다.
+1 VS 2010을 사용하고 있는데 동작이 동일합니다. –
@TimSchmelter이 점을 명확히 해 주셔서 감사합니다. 나는 그것이 디자인에 의한 것이라고 생각한다. 하지만 왜? –