Keyword this. The purpose of keyword this in class
Contents
- 1. The definition of this keyword. What does the this keyword mean in the class?
- 2. Cases of using the this keyword in C# programs
- 3. An example of using this to access class fields from a method body
- 4. An example of using this to call class constructors
- 5. Passing a reference to the current object to the method. Example
- 6. An example of using the this keyword to declare an indexer
- 7. When can the this keyword not be used in a class?
- Related topics
Search other websites:
1. The definition of this keyword. What does the this keyword mean in the class?
Class methods can use the this keyword. By definition, this is an implicit reference to the current instance of the class, which has several useful uses in the class.
⇑
2. Cases of using the this keyword in C# programs
The keyword this is used in the following cases.
- When a name exists in a class method that matches the name of a class field.
- If there are several constructors in a class, then this is used to call the main constructor from others (redirecting to the main constructor). This is to avoid code duplication.
- When a method needs to pass a reference to the current object. In this case, when calling the method, the this keyword is indicated.
- If an indexer is declared in the class.
⇑
3. An example of using this to access class fields from a method body
In the example, two methods and two constructors are declared in the Program class:
- constructor Program() without parameters;
- constructor Program() with one parameter. This constructor demonstrates using this to initialize a class field;
- method PrintInt() – demonstrates access to the field of the class whose name is overlapped by the name of the method parameter;
- method Print() – demonstrates access to a field of a class whose name is overlapped by the name of the internal variable declared in the method.
The program text is as follows
using System; using static System.Console; // include the static class System.Console namespace ConsoleApp2 { // Keyword this. Access to class fields from a method. class Program { int d = 25; // class field named d // constructor without parameters Program() { } // Constructor with 1 parameter, the name of parameter - d Program(int d) { this.d = d; // use this to access the field d } // A function that displays the value of the parameter and field d public void PrintInt(int d) // parameter name d matches the field name d { // Access to the parameter d WriteLine("Parameter d = {0}", d); // Access to the field d by referring this.d WriteLine("Field d = {0}", this.d); // Field d = 25 } // A function in which an internal variable named d is declared public void Print() { // Internal variable d - the name of this variable matches the name of the field d int d = 77; // Print the value of the internal variable d WriteLine("Internal d = {0}", d); // Access to field d is implemented as this.d WriteLine("Field d = {0}", this.d); // Field d = 25 } static void Main(string[] args) { // Demonstrates the use of the this keyword // 1. Declare an instance of the Program class Program pr = new Program(30); // constructor call with 1 parameter // 2. Call the PrintInt() method pr.PrintInt(50); // 3. Call the Print() method pr.PrintD(); } } }
The result of the program
Parameter d = 50 Field d = 30 Internal d = 77 Field d = 30
⇑
4. An example of using this to call class constructors
The keyword this can be used to call one constructor from another constructor. For a class that contains several constructors, the main constructor is selected. This is the constructor with the most parameters. Other constructors access this main constructor by calling this.
The Line class is defined that defines the line given by the coordinates of the two extreme points (x1; y1), (x2; y2). The class demonstrates calling constructors using the this keyword.
In our case, the main constructor is a constructor with 4 parameters.
The text of the Line class is as follows:
using System; using static System.Console; // include the static class System.Console namespace ConsoleApp2 { // The keyword this. Call the class constructor class Line { private int x1, y1, x2, y2; // Main constructor: it has 4 parameters public Line(int x1, int y1, int x2, int y2) { // Using this to access fields this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; WriteLine("Line(int, int, int, int)"); } // Constructor with 2 parameters, // implements a line that starts from the origin. // The constructor uses the this keyword // to redirect to a constructor with 4 parameters. public Line(int x, int y) : this(0, 0, x, y) { WriteLine("Line(int, int)"); } // Constructor without parameters, implements a line with coordinates (0; 0), (1; 1) public Line() : this(1, 1) // redirect to constructor with 2 parameters { WriteLine("Line()"); } // Method that displays the fields x1, y1, x2, y2 on the screen public void Print() { WriteLine("Fields values: "); WriteLine($"x1 = {x1}, y1 = {y1}, x2 = {x2}, y2 = {y2}"); } } class Program { static void Main(string[] args) { // Demonstrate constructor calls with this WriteLine("Object l1:"); Line l1 = new Line(1, 3, 5, 6); l1.Print(); WriteLine("\nObject l2:"); Line l2 = new Line(3, 4); l2.Print(); WriteLine("\nObject l3:"); Line l3 = new Line(); l3.Print(); } } }
The result of the program
Object l1: Line(int, int, int, int) Fields values: x1 = 1, y1 = 3, x2 = 5, y2 = 6 Object l2: Line(int, int, int, int) Line(int, int) Fields values: x1 = 0, y1 = 0, x2 = 3, y2 = 4 Object l3: Line(int, int, int, int) Line(int, int) Line() Fields values: x1 = 0, y1 = 0, x2 = 1, y2 = 1
⇑
5. Passing a reference to the current object to the method. Example
If you need to pass the current instance of this class to the class method, then the this keyword is used. In the example below, the this keyword is used in the DisplayLengthOrigin() method of the Point class when calling the LengthOrigin() method of the same class.
The sample text for a Console Application is as follows:
using System; using static System.Console; // include the static class System.Console namespace ConsoleApp2 { // The keyword this. Passing a reference to the current object to the method class Point { int x, y; // Constructor with 2 parameters public Point(int x, int y) { this.x = x; this.y = y; } // Access methods double GetX() { return x; } double GetY() { return y; } void Set(int x) { this.x = x; } void Set(int y) { this.y = y; } // A method that calculates the distance from pt to the origin public double LengthOrigin(Point pt) { return Math.Sqrt(pt.GetX() * pt.GetX() + pt.GetY() * pt.GetY()); } // This method uses this to pass the current instance // to the LengthOrigin() method. // The method displays the distance from the point to the origin public void DisplayLenthOrigin() { double len; // passing the current instance to the LengthOrigin() method len = LengthOrigin(this); WriteLine("The distance to the origin = {0:f3}", len); } } class Program { static void Main(string[] args) { Point pt = new Point(2, 5); pt.DisplayLenthOrigin(); } } }
The result of the program:
The distance to the origin = 5.385
⇑
6. An example of using the this keyword to declare an indexer
The example implements the ArrayIntegers class, which implements an array of integers. To access an array element, the indexers mechanism is used. The indexer uses the this keyword, which symbolizes a call to the current instance of the class. You can read more about the features of using indexers in classes here.
The demo text of the program created using the Console Application template is given below.
using System; using static System.Console; // include the static class System.Console namespace ConsoleApp2 { // Keyword this. Declarint an indexer class ArrayIntegers { private int[] Array; // a reference to array // Constructor with 1 parameter - main constructor // - size - array size; // - defaultValue - argument by default public ArrayIntegers(int size, int defaultValue = 0) { // 1. Checking for correct input if (size <= 0) size = 1; // at least 1 item in the array // 2. Allocate memory for Array Array = new int[size]; // 3. Fill array with values by default for (int i = 0; i < Array.Length; i++) Array[i] = defaultValue; } // Constructor without parameters, // вызвать конструктор с 2 параметрами с помощью this public ArrayIntegers() : this(10, 0) // 10 items by default { } // Indexer - access to an array item by index, // this keyword is used here public int this[int index] { // accessors get { return Array[index]; } set { Array[index] = value; } } // Method for displaying an array on the screen public void Print() { WriteLine("Array of integers:"); for (int i = 0; i < Array.Length; i++) Write($"{Array[i]}\t"); WriteLine(); } } class Program { static void Main(string[] args) { // 1. Declare an instance of ArrayIntegers class ArrayIntegers AI = new ArrayIntegers(5); // 2. Initialize the AI array by values for (int i = 0; i < 5; i++) AI[i] = i * i; // 3. Display the array AI items AI.Print(); } } }
The result of the program:
Array of integers: 0 1 4 9 16
⇑
7. When can the this keyword not be used in a class?
The this keyword cannot be used:
- in static class methods;
- in static classes.
This is due to the fact that static methods exist only at the class level and are not related to class instances (class objects).
⇑
Related topics
- Classes. Class definition. Object of class. Keyword this
- Indexers. One-dimensional and multidimensional indexers. Indexers without basic array. Overloading indexers
⇑