Статья Автор: Деникина Н.В., Деникин А.В.

Ключевое слово this в C#

this — это ключевое слово в C#, которое представляет ссылку на текущий экземпляр класса. Оно используется для доступа к членам класса (полям, свойствам, методам) из методов этого же класса.

1. Разрешение конфликта имен

Самое частое использование this — когда параметры метода или конструктора имеют те же имена, что и поля класса:
 

public class Person
{
    private string name;
    private int age;
    
    public Person(string name, int age)
    {
        this.name = name;  // this.name - поле класса, name - параметр
        this.age = age;    // this.age - поле класса, age - параметр
    }
    
    public void SetName(string name)
    {
        this.name = name;  // Без this было бы непонятно, какой name имеется в виду
    }
}

2. Вызов конструкторов через this

Конструктор может вызвать другой конструктор того же класса с помощью : this(...):

public class Rectangle
{
    public double Width;
    public double Height;
    
    // Основной конструктор
    public Rectangle(double width, double height)
    {
        this.Width = width;
        this.Height = height;
    }
    
    // Конструктор для квадрата - вызывает основной
    public Rectangle(double side) : this(side, side)
    {
        // Сначала выполнится Rectangle(side, side)
        // Потом тело этого конструктора (если есть код)
    }
    
    // Конструктор по умолчанию
    public Rectangle() : this(1, 1)
    {
    }
}

3. Передача текущего объекта в метод

this можно передавать как аргумент в другие методы:

public class Student
{
    public string Name;
    
    public void EnrollInCourse(Course course)
    {
        course.AddStudent(this);  // Передаем текущий объект Student
    }
}

public class Course
{
    private List students = new List();
    
    public void AddStudent(Student student)
    {
        students.Add(student);
    }
}

4. Возврат текущего объекта (Fluent Interface)

Методы могут возвращать this для создания цепочек вызовов:

  var builder = new StringBuilder();
  builder.Append("Hello")
     .Append(" ")
     .Append("World")
     .Clear()
     .Append("Hi");

5. Индексаторы и свойства

this используется для создания индексаторов:

public class Collection
{
    private string[] items = new string[10];
    
    // Индексатор
    public string this[int index]
    {
        get { return items[index]; }
        set { items[index] = value; }
    }
}

// Использование:
Collection col = new Collection();
col[0] = "First";  // Вызывается set индексатора
string item = col[0];  // Вызывается get индексатора

6. Расширяющие методы (Extension Methods)

В расширяющих методах this используется для указания типа, который расширяется:
 

public static class StringExtensions
{
    // this string str - указывает, что метод расширяет тип string
    public static bool IsEmpty(this string str)
    {
        return string.IsNullOrEmpty(str);
    }
}

// Использование:
string text = "";
bool empty = text.IsEmpty();  // Вызывается как метод строки
Печать