De C# this Keyword Onder de Loep
De C# this Keyword Onder de Loep
Verken de veelzijdige C# this keyword door beknopte uitleg en real-world code samples.
In C# verwijst this naar de huidige instantie van een klasse. Het is onmisbaar voor het onderscheiden tussen instantieleden en methodeparameters, het aanroepen van overbelaste constructors, het doorgeven van het huidige object aan andere methodes en het declareren van indexers.
using System;
namespace ThisKeyword {
class Test {
int num;
Test(int num) {
// this.num refereert naar het instantieveld
this.num = num;
Console.WriteLine("object van this: " + this);
}
static void Main(string[] args) {
Test t1 = new Test(4);
Console.WriteLine("object van t1: " + t1);
Console.ReadLine();
}
}
}
Output
object van this: ThisKeyword.Test object van t1: ThisKeyword.Test
Zowel t1 als this refereren naar dezelfde instantie; dus hun string representaties matchen.
Variabelen met Dezelfde Naam Ontwarren
Instantievelden en parameters kunnen een naam delen, maar zonder this behandelt de compiler de referentie als de parameter, waardoor het veld ongewijzigd blijft.
using System;
namespace ThisKeyword {
class Test {
int num;
Test(int num) {
num = num; // wijst parameter aan zichzelf toe, veld blijft default (0)
}
static void Main(string[] args) {
Test t1 = new Test(4);
Console.WriteLine("waarde van num: " + t1.num);
Console.ReadLine();
}
}
}
Output
0
De output is nul omdat de toewijzing het veld niet beïnvloedt. this lost de ambiguïteit op:
using System;
namespace ThisKeyword {
class Test {
int num;
Test(int num) {
// this.num refereert naar het instantieveld
this.num = num;
}
static void Main(string[] args) {
Test t1 = new Test(4);
Console.WriteLine("waarde van num: " + t1.num);
Console.ReadLine();
}
}
}
Output
waarde van num: 4
Constructor Chaining met this
Wanneer een klasse meerdere constructors aanbiedt, kan er een een andere aanroepen om initialisatielogica te centraliseren. Dit wordt bereikt met het this trefwoord na een dubbele punt in de constructorhandtekening.
using System;
namespace ThisKeyword {
class Test {
Test(int num1, int num2) {
Console.WriteLine("Constructor met twee parameters");
}
// roept de twee-parameter constructor aan
Test(int num) : this(33, 22) {
Console.WriteLine("Constructor met één parameter");
}
public static void Main(string[] args) {
Test t1 = new Test(11);
Console.ReadLine();
}
}
}
Output
Constructor met twee parameters Constructor met één parameter
De één-parameter constructor voert eerst de twee-parameter constructor uit, daarna gaat hij door met zijn eigen body. Dit patroon, constructor chaining genoemd, houdt initialisatielogica DRY.
Huidige Instantie Doorgeven aan Methodes
Soms heeft een methode nodig om te opereren op het object dat het aanroepte. this als argument gebruiken maakt de intentie expliciet.
using System;
namespace ThisKeyword {
class Test {
int num1;
int num2;
Test() {
num1 = 22;
num2 = 33;
}
// methode die een Test instantie accepteert
void PassParameter(Test t) {
Console.WriteLine("num1: " + t.num1);
Console.WriteLine("num2: " + t.num2);
}
void Display() {
// geef de huidige instantie door
PassParameter(this);
}
public static void Main(string[] args) {
Test t1 = new Test();
t1.Display();
Console.ReadLine();
}
}
}
Output
num1: 22 num2: 33
Omdat this de aanroepende instantie vertegenwoordigt, kan de methode veilig toegang krijgen tot de private velden.
Een Indexer Declareren met this
Indexers stellen objecten in staat om geïndexeerd te worden als arrays. Het this trefwoord declareert de indexer handtekening.
using System;
namespace ThisKeyword {
class Student {
private string[] names = new string[3];
// Indexer declaratie
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
De private names array wordt benaderd via de indexer, wat encapsulatie intact houdt terwijl array-achtige syntaxis wordt aangeboden.
Voor een diepere duik in indexers, raadpleeg Microsoft's officiële documentatie: C# Indexer.
C Taal
- De DS18B20 Temperatuursensor Testen op Raspberry Pi
- Vliegende naaldtest (FPT): Professionele gids voor betrouwbare PCB-functionaliteitsverificatie
- Turck TB3-CP80: Precisie Sensor Testbox voor Inductieve, Magnetische, Capacitieve en Fotoelektrische Sensoren
- Pomona MP1 Magnetische Meetpen – 4mm Veiligheidsbus, Rechthoekig voor Precieze Industriële Diagnostiek
- Snelle smartphone-gebaseerde COVID-19 test levert 10-minuten, hoge-nauwkeurigheid resultaten
- Rigorese Softwaretesten bij RTI: Betrouwbaarheid Garanderen in Connext DDS
- C# Static Keyword: Static Variabelen, Methodes en Classes Beheersen
- Coded UI Test Automatiseringsframework: Een Uitgebreide Beginner's Gids
- Python's Global Keyword onder de knie krijgen: Hoe en wanneer te gebruiken
- Java this-sleutelwoord uitgelegd: praktische toepassingen, constructors en meer
- Java's final-sleutelwoord begrijpen: variabelen, methoden en klassen