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

  • NLthomas21

    NLthomas21

    20 Mayıs 2008
  • Drakinen

    Drakinen

    1 EYLÜL 2008
  • Ryan Ha

    Ryan Ha

    9 NİSAN 2006