Saya melihat beberapa kode dan memiliki pernyataan ini:
~ConnectionManager()
{
Dispose(false);
}
Kelas mengimplementasikan IDisposable
antarmuka, tetapi saya tidak tahu apakah itu bagian dari tilde (~) digunakan untuk.
Saya melihat beberapa kode dan memiliki pernyataan ini:
~ConnectionManager()
{
Dispose(false);
}
Kelas mengimplementasikan IDisposable
antarmuka, tetapi saya tidak tahu apakah itu bagian dari tilde (~) digunakan untuk.
Jawaban:
~ adalah destruktor
Menyelesaikan
Dalam C #, metode Menyelesaikan melakukan operasi yang destruktor C ++ standar akan lakukan. Di C #, Anda tidak menamainya Menyelesaikan - Anda menggunakan sintaksis C ++ destruktor menempatkan simbol tilde (~) di depan nama kelas.
Membuang
Lebih disukai untuk membuang objek dalam suatu Close()
atau Dispose()
metode yang dapat dipanggil secara eksplisit oleh pengguna kelas. Finalisasi (destruktor) dipanggil oleh GC.
The IDisposable antarmuka memberitahu dunia bahwa kelas Anda memegang ke sumber daya yang harus dibuang dan memberikan pengguna cara untuk membebaskan mereka. Jika Anda perlu menerapkan finalizer di kelas Anda, metode Buang Anda harus menggunakan GC.SuppressFinalize()
metode tersebut untuk memastikan bahwa finalisasi instance Anda ditekan.
Apa yang harus digunakan?
Adalah tidak sah untuk memanggil destruktor secara eksplisit. Destruktor Anda akan dipanggil oleh pemulung. Jika Anda menangani sumber daya tak terkelola yang berharga (seperti pegangan file) yang ingin Anda tutup dan buang secepat mungkin, Anda harus mengimplementasikan antarmuka IDisposable.
Finalize
metode ini disebut secara rekursif untuk semua contoh dalam rantai pewarisan, dari yang paling diturunkan ke yang paling diturunkan" . Perhatikan bahwa itu bukan perilaku yang sama dengan yang Anda dapatkan dari perusak yang dapat diwarisi.
Ini adalah finalizer . Sejujurnya, Anda harus sangat jarang menulis finalizer. Anda benar-benar hanya perlu menulis satu jika:
IntPtr
) dan Anda tidak dapat menggunakan SafeHandle
yang membuatnya lebih mudahIDisposable
di kelas yang tidak disegel. (Preferensi saya adalah untuk menyegel kelas kecuali mereka dirancang untuk pewarisan.) Penyelesai adalah bagian dari pola Buang kanonik dalam kasus tersebut.Ini digunakan untuk menunjukkan destruktor untuk kelas.
try/finally
blok yang umumnya tidak berguna yang memastikan bahwa Finalize
metode induk dipanggil. Sebagian besar hal yang benar untuk destruktor benar untuk finalizer, dan sebaliknya, tetapi kata-kata berarti hal yang sedikit berbeda.
Sama seperti C ++, itu adalah destructor; Namun dalam C # Anda tidak menyebutnya secara eksplisit, itu dipanggil ketika objek dikumpulkan.
Lihat Destructors (Panduan Pemrograman C #) . Perlu diketahui, bahwa, tidak seperti C ++, programmer tidak memiliki kendali atas kapan destructor dipanggil karena ini ditentukan oleh pengumpul sampah.
~ biasanya mewakili dekonstruktor. yang dijalankan tepat sebelum objek mati.
Berikut ini adalah deskripsi dari deconstructors C # yang saya temukan