Setiap kali object dicetak dengan Console.WriteLine() atau disisipkan ke string interpolation, .NET perlu mengubah object tersebut menjadi teks. Semua class mewarisi method ToString() dari class Object untuk keperluan itu. Versi bawaannya menghasilkan nama tipe lengkap, sehingga data di dalam object tidak tampil sama sekali.
Perilaku Bawaan ToString #
Lihat class Label sederhana berikut yang belum mengoverride ToString():
public class Label
{
public string Isi { get; set; }
public Label(string isi)
{
Isi = isi;
}
}
Label label = new Label("Nota pembelian");
Console.WriteLine(label.ToString());Output yang Dihasilkan:
Verify3e.LabelProperty Isi berisi teks, tetapi output hanya menampilkan nama tipe. Pola hasilnya Namespace.NamaClass; pada project Anda, bagian namespace mengikuti nama project masing-masing, sehingga hasilnya bisa berbeda dari contoh ini. Nilai Isi yang sudah diisi juga tidak ikut tampil, karena versi bawaan tidak membaca data object sama sekali.
Mengoverride ToString #
Class Tiket berikut mengganti ToString() agar menghasilkan teks yang berguna:
public class Tiket
{
public string Kode { get; set; }
public string NamaPenumpang { get; set; }
public Tiket(string kode, string namaPenumpang)
{
Kode = kode;
NamaPenumpang = namaPenumpang;
}
public override string ToString()
{
return $"Tiket {Kode} atas nama {NamaPenumpang}";
}
}
Tiket tiketBudi = new Tiket("GA-102", "Budi");
Console.WriteLine(tiketBudi.ToString());
Console.WriteLine(tiketBudi);Output yang Dihasilkan:
Tiket GA-102 atas nama Budi
Tiket GA-102 atas nama BudiMari kita bedah baris demi baris:
public override string ToString(): Tandaoverridemengganti versi milikObject; return type wajibstringdan method ini tidak punya parameter.return $"Tiket {Kode} ...": Method ini bebas membaca property class dan mengembalikan bentuk teks apa pun yang paling membantu pembacanya.Console.WriteLine(tiketBudi.ToString()): Pemanggilan eksplisit mengembalikan teks hasil override.Console.WriteLine(tiketBudi): Baris kedua menghasilkan teks yang sama, karenaWriteLinememanggilToString()secara implisit ketika menerima parameterobject.
Kapan Mengoverride ToString #
Override ToString() layak dipasang ketika:
- Object sering dicetak ke console atau log, seperti class
Tiketdi atas. - Pesan error atau laporan harus memuat data object, bukan nama tipenya saja.
- Tim ingin satu bentuk teks yang konsisten untuk satu class, alih-alih setiap pemanggil merangkai teksnya sendiri.
Sebaliknya, class yang datanya panjang bisa memilih format ringkas, misalnya hanya menampilkan Kode tanpa seluruh isi. Bentuk teksnya sepenuhnya mengikuti kebutuhan pembacanya.
Method ToString() menjadi cara paling ringkas untuk membuat object mudah dibaca manusia; class model yang sering dicetak hampir selalu terbantu dengan override ini.