Her zaman aramanız gerekip gerekmediğine ilişkin sorunuz Dispose
genellikle 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 Dispose
zorunlu 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, Dispose
bu 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, IAsyncResult
kendisinin Microsoft'un IDisposable
nesnelerle ilgilenmek için kendi yayınlanmış yönergelerine uymamasıdır. Yani, bir sınıf bir IDisposable
türe bir başvuru içeriyorsa, o zaman sınıfın kendisi uygulaması gerekir IDisposable
. Bu IAsyncResult
kurala uyulursa, kendi Dispose
yö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
.