IDisposable Arabirimi (System)
System IDisposable Arabirim
Yönetilmeyen kaynakları serbest bırakmak için bir mekanizma sağlar.
Bu tür için .NET Framework kaynak kodu göz atmak için bkz: Reference Source.
Boşaltma, serbest bırakma veya yönetilmeyen kaynakları sıfırlama ile ilişkili uygulama tanımlı görevleri gerçekleştirir.
Bu tür için .NET Framework kaynak kodunu görüntülemek için bkz: Reference Source. Kaynak kodu çevrimiçi göz atın, çevrimdışı izleme başvurusu indirin ve hata ayıklama sırasında (düzeltme eklerini ve güncelleştirmeleri dahil) kaynakları aracılığıyla adım; see instructions.
Birincil bu arabirimin yönetilmeyen kaynakları serbest bırakmak için kullanılır. Çöp toplayıcı otomatik olarak o nesne artık kullanıldığında, yönetilen bir nesne için ayrılan belleği serbest bırakır. Ancak, atık toplama ne zaman yapılacağını tahmin etmek mümkün değildir. Ayrıca, atık toplayıcı pencere işleyicileri gibi yönetilmeyen kaynakları olanağıyla sahip veya dosyalar ve akışlar açın.
Kullanım Dispose açıkça atık toplayıcı ile birlikte yönetilmeyen kaynakları serbest bırakmak için bu arabirimin yöntemi. Nesne artık gerekli olmadığında tüketici bir nesnenin bu yöntemini çağırabilirsiniz.
Eklemek için önemli bir değişiklik olduğunu IDisposable varolan bir sınıfa arabirimi. Önceden varolan tüketicileri türünüze çağrılamıyor çünkü Dispose, türü tarafından tutulan yönetilmeyen kaynakları serbest bırakılacak belirli olamaz.
Çünkü IDisposable.Dispose uygulama, bir tür tüketici tarafından çağrıldığında, bir örneği tarafından sahip olunan kaynaklar artık gerekmediğinde, yönetilen nesne ya da kaydırılacağını bir SafeHandle (önerilen seçenek) veya geçersiz kılmalısınız Object.Finalize çağırmak tüketici unutması durumunda, yönetilmeyen kaynakları serbest Dispose.
.NET Framework C++ derleyicisi kaynakların belirleyici bırakma destekler ve doğrudan uyarlamasını izin verme Dispose yöntemi.
Konusunda ayrıntılı bilgi için bu arabirimi ve Object.Finalize yöntemi kullanılıyorsa, bkz: Çöp Toplama ve Dispose Yöntemi Uygulama Konular.
IDisposable uygulayan bir nesne kullanma
Uygulama IDisposable yalnızca yönetilmeyen kaynakları doğrudan kullanıyorsanız. Uygulamanız yeterlidir uygulayan bir nesne kullanıyorsa IDisposable, sağlamıyorsa bir IDisposable uygulaması. Bunun yerine, nesnenin çağırmalıdır IDisposable.Dispose kullanmadan bittiğinde uygulama. Programlama diliniz bağlı olarak bunu iki yoldan biriyle yapabilirsiniz:
Bir dil kullanarak gibi oluşturmak using C# ve Visual Basic deyiminde.
Çağrı kaydırma tarafından IDisposable.Dispose uygulamasında bir try/catch bloğu.
Belgelerine türleri uygulayan IDisposable bu olgu not edin ve çağırmak için bir anımsatıcı dahil kendi Dispose uygulaması.
C# ve Visual Basic kullanılarak deyimi
Dilinizi bir yapı gibi destekliyorsa kullanarak deyimi C# ve kullanma deyimi Visual Basic'te kullanabilirsiniz açıkça çağırmak yerine IDisposable.Dispose kendiniz. Aşağıdaki örnek, tanımlamakta bu yaklaşımı kullanır bir WordCount bir dosya ve bu sözcükleri sayısı hakkında bilgiler saklayan sınıf.
using Gerçekten söz dizimi kolaylık sağlamak amacıyla bir ifadedir. Derleme zamanında dil derleyicisi için Ara dile (IL) uygulayan bir try/catch bloğu.
Hakkında daha fazla bilgi için using deyimi, bkz: Using Deyimi (Visual Basic) veya using Deyimi (C# Başvurusu) Konular.
Programlama diliniz gibi bir yapı desteklemez, using C# veya Visual Basic deyiminde ya da onu kullanmayı tercih ederseniz, çağırabilirsiniz IDisposable.Dispose uygulamasından finally , engelleme bir try/catch deyimi. Aşağıdaki örnek değiştirir using ile önceki örnekte engelleme bir try/catch/finally bloğu.
Hakkında daha fazla bilgi için try/finally desen bkz Try...Catch...Finally Deyimi (Visual Basic), try-finally (C# Başvurusu), veya try-finally Deyimi (C).
Uygulamanız gerekir IDisposable yalnızca türünüz yönetilmeyen kaynakları doğrudan kullanıyorsa. Türünüz tüketicileri çağırabilir, IDisposable.Dispose örneği artık gerekli olmadığında kaynakları serbest uygulama. Hangi başarısız çağırmak durumlarında Dispose, türetilmiş bir sınıf ya da kullanım gereken SafeHandle yönetilmeyen kaynakları veya sarmalamak için geçersiz kılmalıdır Object.Finalize yöntemi için bir başvuru türü. Her iki durumda da, kullandığınız Dispose boşaltma, serbest bırakma veya yönetilmeyen kaynakları sıfırlama gibi yönetilmeyen kaynakları kullandıktan sonra ne olursa olsun temizleme gereklidir yapmak için yöntemi.
Bir taban sınıf tanımlıyorsanız, yönetilmeyen kaynakları kullanan ve, sahip veya sağlamak, çıkarılması gereken alt sınıfların olasıdır, uygulamanız gerekir IDisposable.Dispose yöntemi ve ikinci bir aşırı yüklemesini sağlayan Dispose, sonraki bölümde açıklandığı gibi.
IDisposable ve devralma hiyerarşisi
Atılabilir olmalıdır alt sınıfların temel bir sınıfla uygulamalıdır IDisposable gibi. Uygulamanız olduğunda bu deseni kullanması gereken IDisposable olmayan herhangi bir türü üzerinde sealed (NotInheritable Visual Basic'te).
Sanal olmayan bir ortak sağlamalıdır Dispose() yöntemi ve korumalı bir sanal Dispose(Boolean disposing) yöntemi.
Dispose() Yöntemi çağırmanız gerekir Dispose(true) ve performans için sonlandırma bastırmak.
Temel türün herhangi sonlandırıcılar içermemelidir.
Aşağıdaki kod parçası, temel sınıflar için dispose deseni yansıtır. Türünüz geçersiz varsayar Object.Finalize yöntemi.
Geçersiz kılarsanız Object.Finalize yöntemi, sınıfınıza aşağıdaki düzeni uygulamanız gerekir.
Alt sınıfların atılabilir düzeni gibi uygulamanız gerekir:
Geçersiz kılmalısınız Dispose(Boolean) ve temel sınıfı çağırın Dispose(Boolean) uygulaması.
Gerekirse, bir sonlandırıcı sağlayabilir. Sonlandırıcıyı çağırmalısınız Dispose(false).
Türetilen sınıflar kendilerini uygulamayan olduğunu unutmayın IDisposable arabirim ve parametresiz bir içermez Dispose yöntemi. Bunlar yalnızca temel sınıfı geçersiz Dispose(Boolean) yöntemi.
Aşağıdaki kod parçası türetilen sınıflar için dispose deseni yansıtır. Türünüz geçersiz varsayar Object.Finalize yöntemi.
Aşağıdaki örnek, uygulayan bir kaynak sınıfı oluşturmak üzere gösterilmiştir IDisposable arabirimi.
Dispose Yöntemi Uygulama