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(); // Вызывается как метод строки