Keyword Readonly pada Bahasa Pemrograman C#

Keyword Readonly pada Bahasa Pemrograman C#
Photo by Ishaq Robin / Unsplash

Dalam C#, keyword readonly digunakan untuk mendeklarasikan field yang nilainya hanya dapat diinisialisasi saat deklarasi atau di dalam constructor. Field yang diberi modifier readonly tidak dapat diubah setelah object dibuat, sehingga memberikan perlindungan terhadap perubahan nilai secara tidak sengaja.

Artikel ini akan membahas apa itu keyword readonly dalam C#, bagaimana cara menggunakannya, serta contoh implementasinya dalam berbagai skenario pemrograman.

1. Apa Itu Keyword readonly dalam C#?

Keyword readonly digunakan untuk membuat field yang hanya dapat diberi nilai saat inisialisasi atau dalam constructor. Ini berbeda dari const, yang harus diinisialisasi saat deklarasi dan tidak bisa diubah dalam constructor.

Sintaks Dasar readonly

class Contoh {
    public readonly int Nilai;
    
    public Contoh(int nilai) {
        Nilai = nilai; // Hanya bisa diubah di constructor
    }
}

Perbedaan readonly dan const

Perbedaan readonly const
Nilai dapat diinisialisasi di constructor ✅ Ya ❌ Tidak
Nilai tetap setelah object dibuat ✅ Ya ✅ Ya
Hanya bisa dideklarasikan di dalam class ✅ Ya ❌ Tidak (harus bersifat static)

2. Contoh Penggunaan readonly dalam C#

2.1 Menggunakan readonly dengan Constructor

using System;

class Kendaraan {
    public readonly string Merek;
    public readonly int Tahun;
    
    public Kendaraan(string merek, int tahun) {
        Merek = merek;
        Tahun = tahun;
    }
}

class Program {
    static void Main() {
        Kendaraan mobil1 = new Kendaraan("Toyota", 2022);
        Console.WriteLine("Mobil: " + mobil1.Merek + " Tahun: " + mobil1.Tahun);
        
        // mobil1.Merek = "Honda"; // Error! Tidak bisa diubah setelah object dibuat
    }
}

Output:

Mobil: Toyota Tahun: 2022

Penjelasan:

  • readonly memastikan bahwa Merek dan Tahun hanya dapat diatur di constructor.
  • Setelah object dibuat, nilainya tidak dapat diubah.

2.2 Menggunakan readonly dengan Inisialisasi Langsung

class Konfigurasi {
    public readonly string Versi = "1.0"; // Bisa diinisialisasi langsung
}

class Program {
    static void Main() {
        Konfigurasi config = new Konfigurasi();
        Console.WriteLine("Versi Aplikasi: " + config.Versi);
    }
}

Output:

Versi Aplikasi: 1.0

Penjelasan:

  • readonly bisa langsung diinisialisasi saat deklarasi.
  • Jika diinisialisasi saat deklarasi, nilainya tetap dan tidak bisa diubah setelah object dibuat.

3. Menggunakan readonly dengan Array atau Reference Type

Walaupun field readonly tidak bisa diubah, isi dari array atau objek reference type masih bisa diubah.

class Data {
    public readonly int[] Angka = { 1, 2, 3 };
}

class Program {
    static void Main() {
        Data data = new Data();
        
        // data.Angka = new int[] { 4, 5, 6 }; // Error! Tidak bisa mengganti reference array
        
        data.Angka[0] = 99; // Bisa! Mengubah isi array diperbolehkan
        Console.WriteLine(string.Join(", ", data.Angka));
    }
}

Output:

99, 2, 3

Penjelasan:

  • Field readonly tidak bisa diberikan reference baru, tetapi isi array masih bisa dimodifikasi.
  • Jika ingin benar-benar melindungi data, gunakan immutable collection atau const.

4. Kapan Harus Menggunakan readonly?

Gunakan readonly jika:

  • Nilai hanya perlu diatur sekali, tetapi tidak bisa dipastikan saat deklarasi.
  • Nilai bisa ditentukan saat object dibuat, tetapi tidak boleh diubah setelahnya.
  • Perlu melindungi data agar tidak dimodifikasi setelah inisialisasi.

Jangan gunakan readonly jika:

  • Nilai tidak berubah sama sekali (gunakan const jika memungkinkan).
  • Perlu diubah setelah object dibuat (gunakan field biasa).

5. Kesimpulan

  • Keyword readonly digunakan untuk membuat field yang hanya bisa diinisialisasi dalam constructor atau saat deklarasi.
  • Berbeda dengan const, readonly memungkinkan nilai diatur dalam constructor.
  • Readonly bisa digunakan untuk field reference type, tetapi isi reference masih bisa diubah.
  • Berguna untuk menjaga nilai tetap aman setelah object dibuat, tetapi tetap fleksibel dalam inisialisasi.

Dengan memahami keyword readonly dalam C#, Anda dapat membuat program yang lebih aman, efisien, dan mudah dikelola!

Read more