Menguasai Kata Kunci this C#
Menguasai Kata Kunci this C#
Jelajahi kata kunci this C# yang serbaguna melalui penjelasan ringkas dan contoh kode dunia nyata.
Di C#, this merujuk pada instance saat ini dari sebuah kelas. Ini sangat penting untuk membedakan antara anggota instance dan parameter metode, memanggil konstruktor yang dioverload, melewati objek saat ini ke metode lain, dan mendeklarasikan indexer.
using System; namespace ThisKeyword { class Test { int num; Test(int num) { // this.num merujuk ke field instance this.num = num; Console.WriteLine("object of this: " + this); } static void Main(string[] args) { Test t1 = new Test(4); Console.WriteLine("object of t1: " + t1); Console.ReadLine(); } } }
Output
object of this: ThisKeyword.Test object of t1: ThisKeyword.Test
Kedua t1 dan this merujuk pada instance yang sama; jadi representasi string mereka cocok.
Membedakan Variabel dengan Nama Sama
Field instance dan parameter dapat berbagi nama, tetapi tanpa this kompiler memperlakukan referensi sebagai parameter, sehingga field tidak tersentuh.
using System; namespace ThisKeyword { class Test { int num; Test(int num) { num = num; // menugaskan parameter ke dirinya sendiri, field tetap default (0) } static void Main(string[] args) { Test t1 = new Test(4); Console.WriteLine("value of num: " + t1.num); Console.ReadLine(); } } }
Output
0
Outputnya adalah nol karena penugasan tidak mempengaruhi field. Menggunakan this menyelesaikan ambigu:
using System; namespace ThisKeyword { class Test { int num; Test(int num) { // this.num merujuk ke field instance this.num = num; } static void Main(string[] args) { Test t1 = new Test(4); Console.WriteLine("value of num: " + t1.num); Console.ReadLine(); } } }
Output
value of num: 4
Chaining Konstruktor dengan this
Saat kelas menawarkan beberapa konstruktor, satu dapat memanggil yang lain untuk memusatkan logika inisialisasi. Ini dicapai dengan kata kunci this setelah titik dua dalam tanda tangan konstruktor.
using System; namespace ThisKeyword { class Test { Test(int num1, int num2) { Console.WriteLine("Constructor with two parameters"); } // memanggil konstruktor dua parameter Test(int num) : this(33, 22) { Console.WriteLine("Constructor with one parameter"); } public static void Main(string[] args) { Test t1 = new Test(11); Console.ReadLine(); } } }
Output
Constructor with two parameters Constructor with one parameter
Konstruktor satu parameter pertama mengeksekusi konstruktor dua parameter, kemudian melanjutkan dengan tubuhnya sendiri. Pola ini, dikenal sebagai chaining konstruktor, menjaga logika inisialisasi tetap DRY.
Melewati Instance Saat Ini ke Metode
Kadang sebuah metode perlu beroperasi pada objek yang memanggilnya. Menggunakan this sebagai argumen membuat niatnya eksplisit.
using System; namespace ThisKeyword { class Test { int num1; int num2; Test() { num1 = 22; num2 = 33; } // metode yang menerima instance Test void PassParameter(Test t) { Console.WriteLine("num1: " + t.num1); Console.WriteLine("num2: " + t.num2); } void Display() { // melewati instance saat ini PassParameter(this); } public static void Main(string[] args) { Test t1 = new Test(); t1.Display(); Console.ReadLine(); } } }
Output
num1: 22 num2: 33
Karena this mewakili instance pemanggil, metode dapat dengan aman mengakses field privatnya.
Mendeklarasikan Indexer dengan this
Indexer memungkinkan objek diindeks seperti array. Kata kunci this mendeklarasikan tanda tangan indexer.
using System; namespace ThisKeyword { class Student { private string[] names = new string[3]; // Deklarasi Indexer public string this[int index] { get { return names[index]; } set { names[index] = value; } } } class Program { public static void Main() { Student s = new Student(); s[0] = "Ram"; s[1] = "Shyam"; s[2] = "Gopal"; for (int i = 0; i < 3; i++) { Console.WriteLine(s[i]); } } } }
Output
Ram Shyam Gopal
Array privat names diakses melalui indexer, menjaga enkapsulasi tetap utuh sambil menawarkan sintaks seperti array.
Untuk menyelami lebih dalam tentang indexer, lihat dokumentasi resmi Microsoft: C# Indexer.