Apa perbedaan, jika ada, antara destruktor dan metode Finalisasi di kelas?
Saya baru-baru ini menemukan bahwa Visual Studio 2008 menganggap destruktor identik dengan metode Finalize, yang berarti bahwa Visual Studio tidak akan membiarkan Anda secara bersamaan menentukan kedua metode di kelas.
Misalnya, fragmen kode berikut:
class TestFinalize
{
~TestFinalize()
{
Finalize();
}
public bool Finalize()
{
return true;
}
}
Memberikan kesalahan berikut pada panggilan untuk Menyelesaikan di destruktor:
Panggilan tersebut ambigu antara metode atau properti berikut: 'TestFinalize. ~ TestFinalize ()' dan 'TestFinalize.Finalize ()'
Dan jika panggilan ke Finalize dikomentari, itu memberikan kesalahan berikut:
Ketik 'ManagementConcepts.Service.TestFinalize' sudah mendefinisikan anggota bernama 'Finalize' dengan jenis parameter yang sama
sumber
Ditemukan di sini: http://sanjaysainitech.blogspot.com/2007/06/difference-between-destructor-dispose.html
Pembaruan: Utas semi-terkait yang menarik di sini .
sumber
You should only implement a Finalize method to clean up unmanaged resources
: Anda meletakkannya di Selesaikan. Sama dengan Buang?Dispose
jauh melebihi jumlah di mana ia harus mengimplementasikan finalizer. ImplementasikanDispose
jika kemungkinan instance kelas atau kelas turunan akan menjadi hal terakhir yang memiliki sumber daya yang tidak dikelola secara langsung, atau secara langsung memiliki hal terakhir untuk memiliki sumber daya yang tidak dikelola secara langsung, atau secara langsung memiliki hal terakhir untuk dimiliki secara langsung dll. Hanya terapkanFinalize
untuk pembersihan sumber daya jika kelas seseorang <i> secara langsung </i> memiliki sumber daya yang tidak terkelola <i> dan hampir tidak ada yang lain </i> - skenario yang jauh lebih sempit.