Pada bab-bab sebelumnya, object RekeningBank dibuat terlebih dahulu, lalu diisi datanya satu per satu. Pola ini memiliki celah: setelah new selesai, semua field berisi nilai bawaan, dan selama beberapa baris berikutnya object berada dalam kondisi tidak lengkap. Apabila satu baris penugasan terlewat, method akan membaca data yang belum diisi. Constructor menutup celah tersebut dengan mengisi data pada saat object dibuat, sehingga object tidak pernah berada dalam kondisi setengah terisi.
Aturan Constructor #
Constructor adalah method khusus yang dijalankan otomatis oleh runtime saat new dieksekusi. Aturannya tetap:
- Nama constructor harus sama persis dengan nama class.
- Constructor tidak memiliki return type; bahkan
voidpun tidak boleh ditulis. - Constructor boleh menerima parameter, seperti method biasa.
- Satu class boleh memiliki lebih dari satu constructor; variasinya dibahas pada bab berikutnya.
Urutan kerjanya pun tetap. Saat baris new dieksekusi, runtime mengalokasikan memori untuk object, menetapkan semua field ke nilai bawaan, lalu menjalankan badan constructor sebelum referensi dikembalikan kepada pemanggil. Dengan urutan ini, tidak ada kode luar yang dapat membaca object sebelum constructor selesai berjalan.
Contoh: Rekening Terisi Sejak Dibuat #
public class RekeningBank
{
public string Nomor;
public string Pemilik;
public int Saldo;
public RekeningBank(string nomor, string pemilik, int saldoAwal)
{
Nomor = nomor;
Pemilik = pemilik;
Saldo = saldoAwal;
}
public void TampilkanInfo()
{
Console.WriteLine($"Rekening {Nomor} a.n. {Pemilik} - Saldo: Rp{Saldo}");
}
}
RekeningBank rekeningBudi = new RekeningBank("REK-4001", "Budi", 500000);
RekeningBank rekeningSiti = new RekeningBank("REK-4002", "Siti", 1200000);
rekeningBudi.TampilkanInfo();
rekeningSiti.TampilkanInfo();Output yang Dihasilkan:
Rekening REK-4001 a.n. Budi - Saldo: Rp500000
Rekening REK-4002 a.n. Siti - Saldo: Rp1200000Mari kita telaah baris demi baris:
public RekeningBank(string nomor, string pemilik, int saldoAwal): mendeklarasikan constructor dengan tiga parameter; namanya sama dengan nama class dan tanpa return type.- Tiga baris penugasan di dalam constructor: mengisi field dengan nilai dari parameter; baris-baris ini berjalan sebelum
newmengembalikan referensi. new RekeningBank("REK-4001", "Budi", 500000): runtime mengalokasikan object, menjalankan constructor dengan ketiga argumen tersebut, lalu mengembalikan referensi yang siap digunakan.TampilkanInfo(): data sudah lengkap sejak baris pertama, sehingga kedua object langsung mencetak informasi yang utuh.
RekeningBank rekening = new RekeningBank();Pesan compiler yang dihasilkan:
error CS7036: There is no argument given that corresponds to the required parameter 'pemilik' of 'RekeningBank.RekeningBank(string, int)'Pesan di atas berasal dari eksekusi dotnet build yang nyata; path project pada laporan aslinya dipangkas agar ringkas.