Di dalam constructor dan method, kode sering kali perlu menyebut object yang sedang bekerja. C# menyediakan kata kunci this untuk maksud tersebut: this adalah referensi ke object pemilik kode yang sedang berjalan. Kata kunci ini menjadi keharusan ketika nama parameter sama dengan nama field, karena compiler harus dibantu membedakan keduanya.

Makna this #

Setiap kali sebuah method dijalankan, runtime mencatat object pemanggilnya. Referensi object itu tersedia di dalam badan method dengan nama this. Karena setiap object memiliki this miliknya sendiri, satu definisi method dapat melayani banyak object dengan benar: this pada pemanggilan oleh object Budi menunjuk object Budi, dan this pada pemanggilan oleh object Siti menunjuk object Siti.

this juga menjadi penentu saat ada nama yang berbenturan. Apabila badan method mendeklarasikan variabel lokal bernama sama dengan field, penulisan nama saja merujuk ke variabel yang paling dekat dengan posisi kode, sedangkan this.NamaField selalu merujuk ke field. Aturan sederhananya: tanpa awalan, compiler memilih nama yang terdekat; dengan awalan this, maksud kita tidak tertukar.

this pada Constructor dan Method #

csharp
public class RekeningBank
{
    public string Nomor;
    public string Pemilik;
    public int Saldo;

    public RekeningBank(string nomor, string pemilik, int saldoAwal)
    {
        this.Nomor = nomor;
        this.Pemilik = pemilik;
        this.Saldo = saldoAwal;
    }

    public RekeningBank(string nomor, string pemilik) : this(nomor, pemilik, 0)
    {
    }

    public void Setor(int jumlah)
    {
        this.Saldo += jumlah;
    }

    public void TampilkanInfo()
    {
        Console.WriteLine($"Rekening {Nomor} a.n. {Pemilik} - Saldo: Rp{Saldo}");
    }
}

RekeningBank rekeningBudi = new RekeningBank("REK-7001", "Budi", 500000);
rekeningBudi.Setor(200000);
rekeningBudi.TampilkanInfo();

RekeningBank rekeningSiti = new RekeningBank("REK-7002", "Siti");
rekeningSiti.Setor(100000);
rekeningSiti.TampilkanInfo();

Output yang Dihasilkan:

text
Rekening REK-7001 a.n. Budi - Saldo: Rp700000
Rekening REK-7002 a.n. Siti - Saldo: Rp100000

Mari kita telaah baris demi baris:

  1. this.Nomor = nomor;: sisi kiri menunjuk field milik object, sisi kanan merujuk parameter; tanpa this, baris tersebut hanya menugaskan parameter ke dirinya sendiri.
  2. this.Saldo += jumlah; pada Setor: menambah saldo object pemanggil; penulisan this di sini opsional, tetapi eksplisit agar maksudnya terbaca.
  3. public RekeningBank(string nomor, string pemilik) : this(nomor, pemilik, 0): constructor dua parameter meneruskan tugasnya ke constructor tiga parameter lewat this(...) dengan saldo 0.
  4. new RekeningBank("REK-7002", "Siti"): compiler memilih constructor dua parameter, yang langsung memanggil constructor tiga parameter sebelum badannya dijalankan.

Dengan this(...), penugasan yang sama tidak perlu ditulis dua kali, sehingga janji dari bab Constructor Overloading kini terpenuhi. Ketika tidak ada nama yang berbenturan, penulisan this murni pilihan gaya; kode yang konsisten tetap memakainya pada constructor berparameter agar arah penugasan langsung terbaca.