Setiap variasi data awal yang berbeda berarti menambah satu overload constructor, dan kombinasi field yang mungkin diisi bisa cepat bertambah. Object initializer menyediakan jalan lain: field diisi langsung pada saat object dibuat, satu entri per field, dengan nama field ditulis eksplisit. Cara ini berguna ketika class belum memiliki constructor yang cocok atau ketika hanya sebagian field yang perlu diisi.
Sintaks Object Initializer #
Object initializer ditulis di belakang new dalam kurung kurawal; setiap entri berupa NamaField = nilai, dipisahkan koma. Koma setelah entri terakhir diperbolehkan, sehingga menambah entri baru tidak mengubah baris sebelumnya. Runtime menjalankan constructor tanpa parameter terlebih dahulu, lalu menugaskan field sesuai urutan yang kita tulis. Karena penugasan terjadi setelah object dibuat, initializer hanya mengisi anggota yang dapat diakses dari tempat pembuatannya, misalnya field public.
Contoh: Mengisi Data Rekening Secara Eksplisit #
public class RekeningBank
{
public string Nomor;
public string Pemilik;
public int Saldo;
public string Cabang;
public void TampilkanInfo()
{
Console.WriteLine($"Rekening {Nomor} a.n. {Pemilik} ({Cabang}) - Saldo: Rp{Saldo}");
}
}
RekeningBank rekeningSiti = new RekeningBank
{
Nomor = "REK-6001",
Pemilik = "Siti",
Saldo = 150000,
Cabang = "Bandung"
};
rekeningSiti.TampilkanInfo();
RekeningBank rekeningBudi = new RekeningBank
{
Nomor = "REK-6002",
Pemilik = "Budi"
};
rekeningBudi.TampilkanInfo();Output yang Dihasilkan:
Rekening REK-6001 a.n. Siti (Bandung) - Saldo: Rp150000
Rekening REK-6002 a.n. Budi () - Saldo: Rp0Mari kita telaah baris demi baris:
new RekeningBank { ... }: tidak ada tanda kurung argumen, sehingga runtime memakai constructor tanpa parameter bawaan, lalu menugaskan field satu per satu.- Empat entri pada object pertama:
Nomor,Pemilik,Saldo, danCabangterisi lengkap sebelumTampilkanInfo()dijalankan. - Dua entri pada object kedua: hanya
NomordanPemilikyang ditugaskan; field yang tidak disebut mempertahankan nilai bawaannya. - Keluaran kedua:
SaldotetapRp0, danCabangyang bernilainulldicetak sebagai teks kosong di dalam tanda kurung.
Object initializer tidak menggantikan constructor, melainkan melengkapinya. Constructor menegakkan data yang wajib ada, sedangkan initializer merapikan pengisian data tambahan. Pada class dengan constructor berparameter, keduanya dapat dipakai berdampingan: argumen constructor ditulis dalam tanda kurung, lalu entri initializer mengikuti di dalam kurung kurawal. Pola yang sama juga berlaku bagi anggota lain selain field, misalnya properti, sehingga kebiasaan menulis initializer tetap berguna pada bab-bab berikutnya.