Bazı kodlara bakıyorum ve bu ifade vardır:
~ConnectionManager()
{
Dispose(false);
}
Sınıf IDisposable
arabirimi uygular , ancak bunun tilde (~) için bir parçası olup olmadığını bilmiyorum.
Bazı kodlara bakıyorum ve bu ifade vardır:
~ConnectionManager()
{
Dispose(false);
}
Sınıf IDisposable
arabirimi uygular , ancak bunun tilde (~) için bir parçası olup olmadığını bilmiyorum.
Yanıtlar:
~ yıkıcıdır
Sonuçlandırmak
C # 'da, Sonlandırma yöntemi standart bir C ++ yıkıcısının yapacağı işlemleri gerçekleştirir. C # 'da bunu sonlandırmazsınız - sınıf adının önüne bir tilde (~) sembolü yerleştirmek için C ++ yıkıcı sözdizimini kullanırsınız.
Elden çıkarmak
Nesneleri , sınıfın kullanıcısı tarafından açıkça çağrılabilen bir Close()
veya Dispose()
yöntemde atmak tercih edilir . Sonuçlandırma (yıkıcı) GC tarafından çağrılır.
Idisposable arayüzü sınıf tanzim için kaynak üzerine tutar ve kullanıcılara bunları serbest bırakmak için bir yol sağlar dünyaya söyler. Eğer sınıfta bir finalizer uygulamak gerekir yoksa, Dispose yöntemi olmalıdır kullanmak GC.SuppressFinalize()
yöntemini örneğinin o sonuçlandırılması bastırılır sağlamak için.
Ne kullanılır?
Bir yıkıcıyı açıkça aramak yasal değildir. Yıkıcınız çöp toplayıcı tarafından çağrılır. Mümkün olduğunca çabuk kapatmak ve atmak istediğiniz değerli yönetilmeyen kaynakları (dosya tanıtıcıları gibi) işlerseniz, IDisposable arabirimini uygulamalısınız.
Finalize
yöntem miras zincirindeki en çok türetilmiş olandan en az türetilmiş olana kadar tüm örnekler için özyinelemeli olarak çağrılır" . Bununla birlikte , kalıtımsal yıkıcılardan alacağınız davranışın aynı olmadığını unutmayın .
Bu bir sonuçlandırıcı . Dürüst olmak gerekirse, çok nadiren bir finalizer yazmanız gerekir. Gerçekten sadece bir tane yazmanız gerekir:
IntPtr
) ile kullanamazsınız SafeHandle
kolaylaştırır hangiIDisposable
Mühürlü olmayan bir sınıfa uyguluyorsunuz . (Benim tercihim, miras için tasarlanmadığı sürece sınıfları mühürlemektir.) Bir finalizer, bu gibi durumlarda kanonik İmha modelinin bir parçasıdır.Sınıfın yıkıcısını belirtmek için kullanılır.
try/finally
üst Finalize
yöntemin çağrılmasını sağlayan genel olarak yararsız bir blok içeren bir sonlandırıcı oluşturur . Yıkıcılar için geçerli olan çoğu şey, finalizörler için geçerlidir ve tersi de geçerlidir, ancak kelimeler biraz farklı şeyler ifade eder.
C ++ ile aynı, yıkıcı; ancak C # 'da bunu açıkça çağırmazsınız, nesne toplandığında çağrılır.
Bkz Yıkıcıların (Guide Programlama C #) . Bununla birlikte, C ++ 'dan farklı olarak, programlayıcının yıkıcı çağrıldığında hiçbir kontrolü olmadığına dikkat edin, çünkü bu çöp toplayıcı tarafından belirlenir.
• genellikle bir yapısökücüyü temsil eder. ki bu bir nesne ölmeden hemen önce çalıştırılır.