SORU
14 Temmuz 2010, ÇARŞAMBA


İf kullanarak bitmeden geri dönersem ne olur? Bu sözde imha edecek?

Aşağıdaki kodu buldum

using(MemoryStream ms = new MemoryStream())
{
     //code
     return 0;
}

dispose() yöntemi using deyimi parantez sonunda denir } değil mi? 7 ** using deyimi bitmeden beri MemoryStream nesneyi uygun bir şekilde imha edilmesi olacak? Burada ne olur?

CEVAP
14 Temmuz 2010, ÇARŞAMBA


Evet, Dispose adı verilecek. Adı çıkmaz, yürütme yaprakları kapsamı using blok, ne olursa olsun ne demek sürdü bırakın bloğu, sonunda yürütme blok, a return deyim, ya da bir istisna.

@Noldorin doğru olarak işaret ettiği gibi, kodu using bir blok kullanarak Dispose finally blok çağrıldığını 14*/finally*içine derlenmiş alır. Örneğin, aşağıdaki kod:

using(MemoryStream ms = new MemoryStream())
{
     //code
     return 0;
}

etkili olur:

MemoryStream ms = new MemoryStream();
try
{
    // code
    return 0;
}
finally
{
    ms.Dispose();
}

finally try blok yürütme tamamlandıktan sonra çalıştırmak için garanti edilir çünkü yani, yürütme yol, Dispose ne olursa olsun adı, ne olursa olsun garanti edilir.

Daha fazla bilgi için, this MSDN article bkz.

Ek:
Sadece küçük bir uyarı Ekle: çünkü Dispose garantili olarak adlandırılan, hemen hemen her zaman iyi bir fikir olduğundan emin olun Dispose hiç bir istisna atar zaman uygulamak IDisposable. Ne yazık ki, ana kütüphane olan bazı sınıflar vardıryapınDispose sana bakıyorum, XML Servisi -- çağrıldığında bazı durumlarda Referans / İstemci Proxy atın! -- Peki bu ne zaman olacak olması çok zor izini orijinal durum varsa Dispose çağrıldı sırasında bir özel durum yığın gevşeyin beri özgün özel durum alır yuttu lehine yeni oluşturulan özel durum tarafından Dispose Ara. Çıldırtıcı sinir bozucu olabilir. Ya da sinir bozucu derecede çıldırtıcı? İki kişiden biri. Belki her ikisi de.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Damien Walters

    Damien Walte

    20 AĞUSTOS 2006
  • Dirty Loops

    Dirty Loops

    21 Mayıs 2007
  • Elly

    Elly

    3 EKİM 2005