Her zaman aramanız gerekip gerekmediğine ilişkin sorunuz Disposegenellikle hararetli bir tartışmadır. .NET topluluğundaki saygın kişilerden ilginç bir bakış açısı için bu bloga bakın .
Kişisel olarak, Jeffrey Richter'in aramanın Disposezorunlu olmadığı şeklindeki pozisyonunun inanılmaz derecede zayıf olduğunu düşünüyorum. Fikrini haklı çıkarmak için iki örnek veriyor.
İlk örnekte Dispose, Windows Forms denetimlerini çağırmanın sıkıcı ve genel senaryolarda gereksiz olduğunu söylüyor . Ancak, Disposebu ana senaryolarda aslında kontrol kapsayıcıları tarafından otomatik olarak çağrıldığından bahsetmiyor .
İkinci örnekte, bir geliştiricinin IAsyncResult.WaitHandle, mülkün bekleme işleyicisini tembel bir şekilde başlatarak gereksiz bir performans cezasına yol açtığını fark etmeden , örneğinin agresif bir şekilde atılması gerektiğini yanlış bir şekilde varsayabileceğini belirtir . Ancak, bu örnekteki sorun, IAsyncResultkendisinin Microsoft'un IDisposablenesnelerle ilgilenmek için kendi yayınlanmış yönergelerine uymamasıdır. Yani, bir sınıf bir IDisposabletüre bir başvuru içeriyorsa, o zaman sınıfın kendisi uygulaması gerekir IDisposable. Bu IAsyncResultkurala uyulursa, kendi Disposeyöntemi, kurucu üyelerinden hangisinin elden çıkarılması gerektiğine karar verebilir.
Bu nedenle, birisinin daha zorlayıcı bir argümanı olmadıkça, çoğunlukla kötü tasarım seçimlerinden kaynaklanan bazı uç durumlar olacağı anlayışıyla "her zaman Dispose" kampında kalacağım.
using.