Ads Home1

C# Tutorial - Mengenal Apa Itu Destructor dan Metode Finalize

http://www.xcodeplus.net/2017/10/csharp-tutorial-destructor-dan-finalize.html

Destructor 

Apa itu Destructor ? Destructor (bahasa indonesia : Destruktor) merupakan kebalikan fungsi dari constructor, yaitu metode khusus yang akan dipanggil secara otomatis ketika objek dibuang dari memori oleh garbage collector. Meskipun C# sudah menyediakan garbage collector untuk mendealokasikan objek secara otomatis, tapi jika objek yang kita buat memiliki akses ke resource lain (misalnya akses file dan database) maka kita perlu membebaskan resource tersebut terlebih dahulu sebelum garbage collector membuang objek bersangkutan. Untuk mengatasi hal semacam ini digunakanlah destructor.


Lalu, Apa itu Garbage collector ? Untuk pertanyaan tersebut kita akan bahas pada pembahasan berikutnya. Saat ini kita hanya akan membahas mengenai Destructor dan Metode Finalize().

Saya telah menjelaskan apa itu destructor beserta fungsi dari destructor sendiri, Lalu, kapan kita mendefinisikan destructor ? Contoh penggunaannya adalah sebagai berikut: jika di dalam constructor suatu objek kita memiliki akses ke file (membuka file), maka kita dapat menutup file tersebut di dalam destructor.

class NamaKelas{
    // destructor
~NamaKelas(){
     // kode untuk membebaskan resource
  }
}


Sama  seperti nama constructor, nama destructor juga harus sama dengan nama kelas tapi diawali dengan tanda tilde (~).

Beberapa hal yang perlu Anda perhatikan tentang destructor adalah sebagai berikut:
  1. Destructor tidak dapat didefinisikan di dalam struktur, hanya di dalam kelas. 
  2. Kelas hanya boleh memiliki satu destructor. 
  3. Tidak seperti constructor, destructor tidak dapat di-overload maupun diwariskan ke kelas turunan.
  4. Destructor tidak dapat dipanggil secara eksplisit. Destructor akan dipanggil secara otomatis oleh garbage collector. 
  5. Destructor tidak memiliki tipe akses (seperti public, private, protected maupun internal). 
  6. Destructor tidak memiliki parameter.

CONTOH:

Berikut ini contoh membuat tiga kelas yang membuat rantai turunan. Kelas pertama merupakan kelas dasar yang kita berinama ‘A’, kelas kedua merupakan kelas turunan dari kelas pertama yang kita berinama ‘B’, dan kita membuat satu kelas lagi yang bernama kelas ‘C’ yang merupakan kelas turunan dari kelas kedua.

Ketiga kelas tersebut masing-masing memiliki metode destructor. Lalu, kita membuat objek instance dari kelas ketiga (kelas C). Ketika program dijalankan, Perhatikan bahwa destructor dari ketiga kelas tersebut akan dipanggil secara otomatis dan juga secara berurutan. Dari yang paling diturunkan hingga yang tidak diturunkan. Maksudnya disini mulai dari kelas ketiga, kelas kedua, dan lalu baru kelas pertama sebagai kelas dasar yang bukan merupakan kelas turunan.

Apakah Anda pusing dengan pernyataan yang saya sampaikan ? Hehe.. Anda tidak perlu khawatir, perhatikan saja contoh program di bawah ini sebagai berikut:


PROGRAM 1.1
using System;
using System.Diagnostics;

// Mendefinisikan kelas A yang merupakan
// kelas dasar.
class A
{
    // Mendefinisikan Destructor untuk kelas A.
    ~A()
    {
        // Pernyataan yang akan dipanggil.
        Trace.WriteLine("Destrutor dari Kelas A Dipanggil...");
    }
}

// Mendefinisikan kelas B yang merupakan
// kelas turunan dari kelas A.
class B : A
{
    // Mendefinisikan Destructor untuk kelas B. 
    ~B()
    {
       // Pernyataan yang akan dipanggil.
       Trace.WriteLine("Destrutor dari Kelas B Dipanggil...");
    }
}

// Mendefinisikan kelas C yang merupakan
// kelas turunan dari kelas B.
class C : B
{
    // Mendefinisikan Destructor untuk kelas C.
    ~C()
    {
       // Pernyataan yang akan dipanggil.
       Trace.WriteLine("Destrutor dari Kelas C Dipanggil...");

    }
}

class TestDestructors
{
    static void Main()
    {
        // Membuat object instance dari kelas C.
        C obj = new C();

        
    }

}


HASIL PROGRAM 1.1
Destrutor dari Kelas C Dipanggil...
Destrutor dari Kelas B Dipanggil...
Destrutor dari Kelas A Dipanggil...



Metode Finalizer

Secara umum, C# tidak memerlukan banyak proses manajemen memori seperti saat Anda bekerja dengan C/C++. Ini dikarenakan di dalam C# adanya garbage collector yang secara implisit mengelola alokasi dan pelepasan memori untuk objek Anda.

Berikut ini hal yang Anda harus perhatikan saat mendefinisikan metode Finalize sebagai berikut:

  1. Finalize tidak dapat didefinisikan di dalam struktur. Finalize hanya dapat digunakan di dalam kelas.
  2. Dalam sebuah kelas hanya dapat memiliki satu Metode Finalize.
  3. Finalize tidak dapat diturunkan maupun di-overload.
  4. Finalize juga tidak dapat dipanggil secara eksplisit. Finalize akan dipanggil secara otomatis.
  5. Finalize tidak memiliki modifier maupun parameter.
Sebuah finalize juga dapat di implementasikan sebagai sebuah ekspresi definisi bodi, seperti contoh berikut ini.

using System;

public class Destroyer
{
   public override string ToString() => GetType().Name;
   
   ~Destroyer() => Console.WriteLine($"The {ToString()} destructor is executing.");                                   
                                                             
}

Dalam C#, destructor secara implisit akan memanggil metode Finalize(), (metode yang didefinisikan di dalam kelas objek). Dengan demikian, suatu destructor yang didefinisikan akan diterjemahkan ke dalam bentuk program di bawah ini.

protected override void Finalize()  
{  
    try  
    {  
        // Pernyataan...  
    }  
    finally  
    {  
        base.Finalize();  
    }  
}

Ini berarti bahwa metode finalize disebut rekursif untuk semua kasus dalam rantai pewarisan, dari yang paling diturunkan ke yang tidak diturunkan. Programmer tidak memiliki control terhadap kapan finalizer dipanggil, hal ini karena ditentukan oleh garbage collector. Garbage collector memeriksa objek yang sudah tidak digunakan lagi oleh program (aplikasi) dan mengembalikan memori yang digunakan untuk menyimpan objek. Finalizer juga dipanggil saat program keluar.
 
Berikut ini contoh program untuk pembacaan sebuah file, yang didalam file tersebut berisikan keterangan (teks) "XCODEPLUS - The Best Resource to Learn to Code" untuk baris pertama file, dan untuk baris kedua bertuliskan "[www.xcodeplus.net]" lalu setelah kita selesai mengakses file tersebut kita harus menutupnya dengan menggunakan destructor. 

Disini asumsikan file yang Ada dikomputer saya berlokasi di D:\, dan file tersebut bernama
MyNewFile.txt. Kata .txt pada nama akhir file itu artinya bahwa saya memiliki sebuah file yang berekstensi (format) teks. 


PROGRAM 1.2
using System;
using System.IO;


class MyFile
{
    string fileName;

    StreamReader sr;

    // Mendefinisikan Constructor untuk Kelas MyFile.
    public MyFile(string fileName)
    {
        this.fileName = fileName;

        sr = new StreamReader(this.fileName);
    }


    // Mendefinisikan Destructor untuk kelas MyFile.
    ~MyFile()
    {
        // Menutup file.
        sr.Close();
        
    }


    // Metode untuk membaca isi file MyNewFile.txt
    // dan menampilkannya ke layar.
    public void ReadAllLines()
    {
        string line = "";
        while ((line = sr.ReadLine()) != null)
        {
            Console.WriteLine(line);
        }
    }
  

}


class TestDestructors
{
    static void Main()
    {
        // Mendeklarasikan path untuk menentukan 
        // lokasi file contoh (D:\MyNewFile.txt).
        string path = @"D:\MyNewFile.txt";
        

        try
        {
          

            // Membuat referensi objek dari kelas MyFile.
            MyFile obj = new MyFile(path);

            // Membaca dan Menampilkan isi data file.
            obj.ReadAllLines();

            

        }

        catch { };


         Console.ReadLine();
    }

}


HASIL PROGRAM 1.2
XCODEPLUS - The Best Resource to Learn to Code
[www.xcodeplus.net]


Catatan:
Disini saya memiliki file dengan nama MyNewFile.txt di computer yang saya gunakan dengan lokasi path: D:\. Jika kode program di atas Anda jalankan di komputer atau laptop Anda, maka compiler akan memberikan pesan bahwa file tidak ditemukan di dalam komputer Anda.


Pada contoh program di atas, kita mendefinisikan destructor untuk kelas MyFile. Dalam destructor tersebut, kita membebaskan file yang sebelumnya kita telah buka/diakses (MyNewFile.txt) pada bagian custructor.



Sebelumnya kita telah membahas apa itu Constructor ?, dan pada pembahasan kali ini kita telah membahas mengenai apa itu Destructor beserta metode Finalize, Disini kita tahu destructor sendiri merupakan kebalikan dari constructor. Di dalam kelas penggunaan constructor dan destructor ini seringkali dijumpai pada dunia pemrograman, sehingga untuk memahami penggunaan dua metode ini sangat dianjurkan.


Saya berharap pembahasan ini juga dapat berguna bagi Anda, dan dapat Anda pahami dengan mudah agar kita bisa mempelajari pemrograman C# ke tahap berikutnya. Jika postingan ini berguna untuk Anda jangan lupa subscribe, like, dan share agar kami dapat selalu berkontribusi sebagai media edukasi pemrograman C#, Terimakasih.




C# (dibaca: C Sharp) merupakan bahasa pemrograman generasi baru yang mewah, kaya akan fitur, dan dapat digunakan untuk membuat beraneka raga program/aplikasi di berbagai bidang. C# mendukung beberapa paradigma pemrograman: imperatif, deklaratif, fungsional, serta pemrograman berorientasi objek. C# termasuk dalam keluarga C, dan fitur-fiturnya banyak diadopsi dari Java dan C++. C# menggunakan pustaka (library) yang terdapat dalam .NET Framework, kelengkapan di dalam pustaka .NET Framework menjadikan proses pengembangan program/aplikasi menggunakan C# relatif lebih mudah dan cepat jika dibandingkan dengan C++ dan Java.

No comments:

Kami menerima masukan dari anda jika memang ada pembahasan yang keliru dan kami sangat senang jika anda dapat berkontribusi untuk menyempurnakan postingan kami. Anda dapat mengirimkan email ke : hari18.muhammad@gmail.com

Jika postingan ini bermanfaat jangan lupa share postingan ini. Kami sangat merekomendasikan untuk anda yang membutuhkan informasi tentang computer stuff silakan subscribe blog kami dapatkan informasi terupdate dari kami secara gratiss. Terimakasih!

Powered by Blogger.