2009-05-20 16 views
37

:"Using" ifadesi C# 'dan VB'ye nasıl çevrilir? Örneğin

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(); 
} 

Artık yaklaşık using söyleyebilir?

Düzenleme:

olarak JaredPar en yayındaki yorumları tartışıldı, bu soru VS2003 içinde Using bir uygulama ile daha çok ilgilidir. .NET 2.0 (VS2005) 'e kadar Using'un tanıtılmadığı belirtildi. JaredPar eşdeğer bir çözüm yayınladı.

+2

"C# anahtar sözcüğünü kullanma" ya da bir kaç varyasyonunu arayın. –

+1

** Visual Basic Programlama Kılavuzu'ndan: ** [Nasıl Yapılır: Bir Sistem Kaynağı Tasnif Et (Visual Basic)] (http://msdn.microsoft.com/en-us/library/wydd5hkd.aspx) – DavidRR

+0

Bunlar için kullanma direktifinin eşdeğerini arıyoruz. System.Net kullanarak ; cevap buradadır http://stackoverflow.com/questions/4134472/vb-net-equivalent-to-cs-using-directive –

cevap

54

VB'de, .NET 2.0 veya daha sonraki bir sürümü kullandığınız varsayılırsa, VB'de hemen hemen aynı sözdizimi vardır (bu, VB.NET v8 derleyicisini veya daha ileri sürümünü gösterir). Temel olarak, sadece parantez çıkarın ve

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 

Sen '

Eğer Edit

burada tüm belgeleri alabilirsiniz "Kullanarak End" a ekleyin VS2003 veya daha önceki sürümleri kullanarak aşağıdaki kodlara ihtiyacınız olacak. Using deyimi VS 2005, .NET 2.0 (reference) kadar tanıtılmamıştır. Teşekkürler Chris! Aşağıdaki kullanım ifadesine eşdeğerdir. Böyle bir şey olacağını

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 
+0

Bu VB sürümü hangi eklenmiştir? Bazı eski kodlarla çalışıyorum ve Visual Studio 2003, onu almıyor gibi görünüyor. – Daniel

+0

@hypoxide, kullanma ifadesi orijinal VB.Net AFAIK beri etrafında olmuştur. Sonraki sürümlere kadar mevcut olmayan birkaç öğeden kurtulmak için kodu değiştirdim. Bunu deneyebilir misiniz ve herhangi bir hata görürseniz buraya ekleyin? – JaredPar

+0

Denedim ama zar atmam. – Daniel

2

:

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 
2

kilit noktası "kullanılan" sınıf varlık ıdisposable arabirimini uygulamak gerektiğidir.

4

Onun aslında, kilitlemek için benzer kod çeşitli hatlar, içine formun vb C# dili şartname itibaren

.... bir using ifadesi derlendi kullanarak işaret etmek önemlidir

using (ResourceType resource = expression) statement 

, iki olası genişletmeden birine karşılık gelir. ResourceType bir değer tipi olduğunda KaynakTürü referans tipi ise, genişleme, Aksi takdirde

{ 
    ResourceType resource = expression; 
    try { 
     statement; 
    } 
    finally { 
     ((IDisposable)resource).Dispose(); 
    } 
} 

olup, genişleme

{ 
    ResourceType resource = expression; 
    try { 
     statement; 
    } 
    finally { 
     if (resource != null) ((IDisposable)resource).Dispose(); 
    } 
} 

derleme sırasında

Temel olarak (uç dil özellikleri pasajı), zaman bu koda dönüştürülür. Kullanarak denilen bir yöntem yoktur, vb.NET dili belirtiminde benzer şeyler bulmaya çalıştım ama bir şey bulamadım, muhtemelen aynı şeyi yapar.

0

using (C#) gibi görünüyor ve Using (VB) çok önemli bir fark var. Ve en azından şimdilik benim için Using'un amacını yenebiliriz.C# öyle değil iken

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 

Sen VB Using gibi NullReferenceException alırsınız üye sınıf değişkeni yeniden tanımlıyor!

Elbette, belki bir şeyleri özlüyorum ..

+1

üye değişkenini yeniden tanımlamaz, yöntem kapsamında geçersiz kılar. Hala var ve aynı ada sahip – jmoreno