SORU
23 EYLÜL 2011, Cuma


Kapat arayayım() veya Elden() akış nesneleri için?

5*, , * StreamReaderStreamWritervb gibi sınıflar IDispose arabirim uygular. O, bu sınıfların nesneleri Dispose() yöntem diyebiliriz anlamına gelir. Ayrıca public yöntem Close() adlı tanımlı ettiler. Benim gibi karıştırır şimdi ben nesneleri ile işim bittikten sonra ne demeliyim? Eğer her ikisi de diyebilir miyim?

Benim geçerli kod bu

using (Stream responseStream = response.GetResponseStream())
{
   using (StreamReader reader = new StreamReader(responseStream))
   {
      using (StreamWriter writer = new StreamWriter(filename))
      {
         int chunkSize = 1024;
         while (!reader.EndOfStream)
         {
            char[] buffer = new char[chunkSize];
            int count = reader.Read(buffer, 0, chunkSize);
            if (count != 0)
            {
               writer.Write(buffer, 0, count);
            }
         }
         writer.Close();
      }
      reader.Close();
   }
}

Gördüğünüz gibi, otomatik olarak her nesne Dispose() yöntem çağrıları using() yapıları, yazdım. Ama aynı zamanda Close() yöntemler arayın. Doğru mudur?

Lütfen akış nesneleri kullanırken beni en iyi uygulamalar önermek. :-)

MSDN örnek using() yapıları kullanmaz ve Close() arama yöntemi:

İyi mi?

CEVAP
23 EYLÜL 2011, Cuma


Reflector.NET hızlı bir sıçrama StreamWriter Close() yöntemini gösterir:

public override void Close()
{
    this.Dispose(true);
    GC.SuppressFinalize(this);
}

Ve StreamReader

public override void Close()
{
    this.Dispose(true);
}

StreamReader 23 *geçersiz kılar

protected override void Dispose(bool disposing)
{
    try
    {
        if ((this.Closable && disposing) && (this.stream != null))
        {
            this.stream.Close();
        }
    }
    finally
    {
        if (this.Closable && (this.stream != null))
        {
            this.stream = null;
            /* deleted for brevity */
            base.Dispose(disposing);
        }
    }
}

StreamWriter yöntemi benzer.

Yani, kod okumayı 27 * & * 28 ** dere istediğiniz sıklıkta ve herhangi bir sırada arayabileceğiniz açıktır. Herhangi bir şekilde davranış değişikliği olmaz.

Aşağı veya Dispose(), Close() ve/veya using ( ... ) { ... } kullanmak daha okunabilir olup olmadığı konusunda.

Benim kişisel tercihi using ( ... ) { ... } her zaman, size yardımcı olarak mümkün olduğunda kullanılmalıdır. "önemi yok".

Ama, bu doğruluğu yardımcı olurken, okunabilirliği azaltmak. C# biz çoktan nasıl aslında akışı aç kapat yapar biliyor muyuz? ayraç kapanış bolluk var

Bunu yapmak için en iyisi olur diye düşünüyorum.:

using (var stream = ...)
{
    /* code */

    stream.Close();
}

Kodu davranışlarını etkilemez, ama yardım okunabilirlik.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • We've moved!

    We've moved!

    7 Ocak 2008
  • kev5124

    kev5124

    9 Kasım 2008
  • The Amazing Atheist

    The Amazing

    20 Kasım 2006