Menu
CoddyTech

IDisposable dan Pernyataan using

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C# di Coddy. Pelajaran 45 dari 70.

Beberapa object menyimpan resource yang tidak dapat dibersihkan secara otomatis oleh pengumpul sampah, seperti file handle, koneksi database, dan socket jaringan. Interface IDisposable menyediakan cara standar untuk melepaskan resource ini setelah kamu selesai menggunakannya.

Sebuah class mengimplementasikan IDisposable dengan menyediakan method Dispose():

public class FileHandler : IDisposable
{
    private bool disposed = false;
    
    public void Dispose()
    {
        if (!disposed)
        {
            Console.WriteLine("Releasing resources...");
            disposed = true;
        }
    }
}

Kamu bisa memanggil Dispose() secara manual, tetapi bagaimana jika terjadi pengecualian sebelum kamu mencapai baris itu? Pernyataan using menjamin pembersihan tetap dilakukan, bahkan saat terjadi masalah:

using (FileHandler handler = new FileHandler())
{
    // Gunakan handler
}  // Dispose() dipanggil secara otomatis di sini

C# modern menawarkan sintaks yang lebih rapi dengan deklarasi using, yang membuang object saat keluar dari cakupan:

void ProcessFile()
{
    using FileHandler handler = new FileHandler();
    // Gunakan handler
}  // Dispose() dipanggil saat method selesai

Pernyataan using berfungsi dengan tipe apa pun yang mengimplementasikan IDisposable. class bawaan seperti StreamReader, SqlConnection, dan HttpClient semuanya mengimplementasikan interface ini, sehingga pengelolaan resource yang tepat menjadi mudah dan andal.

challenge icon

Tantangan

Mudah

Mari kita buat simulator koneksi database yang menunjukkan pengelolaan resource yang tepat menggunakan interface IDisposable dan pernyataan using. Kamu akan membuat class yang mencatat kapan koneksi dibuka dan ditutup, sehingga resource selalu dilepaskan dengan benar.

Kamu akan menyusun kodemu dalam dua file:

  • DatabaseConnection.cs: Buat class DatabaseConnection di namespace DataAccess yang mengimplementasikan IDisposable. Koneksimu harus:
    • Memiliki property ConnectionName (string, hanya-baca) yang ditetapkan melalui constructor
    • Melacak apakah koneksi sudah dibuang menggunakan field boolean privat
    • Mencetak Connection opened: {ConnectionName} saat object dibuat (di constructor)
    • Mengimplementasikan method Dispose() untuk mencetak Connection closed: {ConnectionName}, tetapi hanya jika koneksi belum dibuang (mencegah pembuangan ganda)
    • Memiliki method Query(string sql) yang mengembalikan Executing on {ConnectionName}: {sql}
  • Program.cs: Di file utama, tunjukkan pengelolaan resource yang tepat dengan menggunakan pernyataan using bersama koneksi database-mu. Buat koneksi, jalankan query, dan biarkan blok using menangani pembersihan secara otomatis.

Kamu akan menerima dua input:

  • Nama koneksi (misalnya, MainDB)
  • Query SQL yang akan dijalankan (misalnya, SELECT * FROM Users)

Gunakan pernyataan using untuk membuat koneksimu. Di dalam blok, panggil method Query dan cetak hasilnya. Saat blok using berakhir, Dispose() akan dipanggil secara otomatis.

Misalnya, jika inputnya adalah MainDB dan SELECT * FROM Users, output-nya akan seperti berikut:

Connection opened: MainDB
Executing on MainDB: SELECT * FROM Users
Connection closed: MainDB

Perhatikan bahwa koneksi ditutup secara otomatis saat blok using berakhir, jadi kamu tidak perlu mengingat untuk memanggil Dispose() secara manual. Pola ini memastikan resource selalu dibersihkan, bahkan jika terjadi exception di dalam blok!

Coba sendiri

using System;
using DataAccess;

class Program
{
    public static void Main(string[] args)
    {
        string connectionName = Console.ReadLine();
        string sqlQuery = Console.ReadLine();
        
        // TODO: Gunakan pernyataan 'using' untuk membuat DatabaseConnection
        // Di dalam blok using:
        // 1. Panggil method Query dengan sqlQuery
        // 2. Cetak hasil dari method Query
        // Method Dispose akan dipanggil secara otomatis saat blok using berakhir
        
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler C# online