"사용" 문은 C#에서 VB로 어떻게 변환됩니까?
예:
BitmapImage bitmap = new BitmapImage();
byte[] buffer = GetHugeByteArray(); // from some external source
using (MemoryStream stream = new MemoryStream(buffer, false))
{
bitmap.BeginInit();
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.StreamSource = stream;
bitmap.EndInit();
bitmap.Freeze();
}
에 대해 더 말해줄 수 있습니까?using
?
편집:
JaredPar의 게시물의 댓글에서 논의되었듯이, 이 질문은 다음의 구현과 더 관련이 있습니다.Using
VS2003에서.라고 지적되었습니다.Using
까지 소개되지 않았습니다.NET 2.0(VS2005).JaredPar도 동일한 해결 방법을 게시했습니다.
를 사용한다고 가정할 때 VB의 구문은 C#과 거의 같습니다.NET 2.0 이상(VB를 의미함).NET v8 컴파일러 이상).기본적으로 교정기를 제거하고 "사용 종료"를 추가합니다.
Dim bitmap as New BitmapImage()
Dim buffer As Byte() = GetHugeByteArrayFromExternalSource()
Using stream As New MemoryStream(buffer, false)
bitmap.BeginInit()
bitmap.CacheOption = BitmapCacheOption.OnLoad
bitmap.StreamSource = stream
bitmap.EndInit()
bitmap.Freeze()
End Using
전체 설명서는 여기에서 확인할 수 있습니다.
편집
VS2003 또는 이전 버전을 사용하는 경우 아래 코드가 필요합니다.사용 설명서는 VS 2005까지 도입되지 않았습니다.NET 2.0(참조).감사합니다 크리스!다음은 사용 설명서와 동일합니다.
Dim bitmap as New BitmapImage()
Dim buffer As Byte() = GetHugeByteArrayFromExternalSource()
Dim stream As New MemoryStream(buffer, false)
Try
bitmap.BeginInit()
bitmap.CacheOption = BitmapCacheOption.OnLoad
bitmap.StreamSource = stream
bitmap.EndInit()
bitmap.Freeze()
Finally
DirectCast(stream, IDisposable).Dispose()
End Try
사용은 실제로 잠금 등과 유사한 다양한 코드 행으로 컴파일된다는 점을 지적하는 것이 중요합니다.
C# 언어 사양에서...양식의 사용 설명서
using (ResourceType resource = expression) statement
두 개의 가능한 확장 중 하나에 해당합니다.언제ResourceType
값 유형이며, 확장은
{
ResourceType resource = expression;
try {
statement;
}
finally {
((IDisposable)resource).Dispose();
}
}
그렇지 않으면 ResourceType이 참조 유형인 경우 확장은
{
ResourceType resource = expression;
try {
statement;
}
finally {
if (resource != null) ((IDisposable)resource).Dispose();
}
}
(끝 언어 사양 코드 조각)
기본적으로 컴파일 시 해당 코드로 변환됩니다.사용 등의 방법은 없습니다.저는 vb.net 언어 사양에서 비슷한 것을 찾으려 했지만 아무것도 찾을 수 없었습니다. 아마도 정확히 같은 일을 하는 것 같습니다.
이는 다음과 같습니다.
Dim bitmap As New BitmapImage()
Dim buffer As Byte() = GetHugeByteArray()
Using stream As New MemoryStream(buffer, False)
bitmap.BeginInit()
bitmap.CacheOption = BitmapCacheOption.OnLoad
bitmap.StreamSource = stream
bitmap.EndInit()
bitmap.Freeze()
End Using
핵심은 "사용" 중인 클래스가 ID 일회용 인터페이스를 구현해야 한다는 것입니다.
처럼 보입니다.using
(C#) 및Using
(VB)에는 매우 중요한 차이가 있습니다.그리고 적어도 지금의 나에게는, 그것은 목적을 파괴할 수 있습니다.Using
.
Imports System.IO
Class Program
Private Shared sw As StreamWriter
Private Shared Sub DoSmth()
sw.WriteLine("foo")
End Sub
Shared Sub Main(ByVal args As String())
Using sw = New StreamWriter("C:\Temp\data.txt")
DoSmth()
End Using
End Sub
End Class
VB에서와 같이 NullReferenceException이 표시됩니다.Using
C#에 있는 동안 멤버 클래스 변수를 재정의하지 않습니다!
물론, 내가 뭔가를 놓쳤을 수도 있습니다.
언급URL : https://stackoverflow.com/questions/887831/how-does-the-using-statement-translate-from-c-sharp-to-vb
'programing' 카테고리의 다른 글
sudo echo "something" >> /etc/privilegedFile이 작동하지 않습니다. (0) | 2023.05.14 |
---|---|
IIf()와 If 간의 성능 차이 (0) | 2023.05.14 |
코코파드:GitHub에 연결하여 코코아 포드/사양 보고서를 업데이트하지 못했습니다. (0) | 2023.05.14 |
줄 바꿈이나 공백 없이 인쇄하는 방법 (0) | 2023.02.03 |
Windows 7에서 mysql 서버 재시작 (0) | 2023.02.03 |