Menu
Coddy logo textTech

Ключевое слово 'this'

Часть раздела Объектно-ориентированное программирование путешествия по C# на Coddy — урок 4 из 70.

Ключевое слово this ссылается на текущий экземпляр класса. Оно используется для доступа к членам экземпляра и позволяет различать параметры и поля с одинаковыми именами.

Используйте this для разграничения полей и параметров

public class Person
{
    private string name;
    private int age;
    
    public Person(string name, int age)
    {
        this.name = name;
        this.age = age;
    }
}

Без this параметр будет перекрывать поле

// Это не будет работать так, как ожидается
public Person(string name, int age)
{
    name = name;  // Присваивает параметр самому себе!
    age = age;    // Присваивает параметр самому себе!
}

Используйте this со свойствами

public class Product
{
    public string Name { get; set; }
    public decimal Price { get; set; }
    
    public Product(string name, decimal price)
    {
        this.Name = name;
        this.Price = price;
    }
    
    public void DisplayInfo()
    {
        Console.WriteLine($"{this.Name}: ${this.Price}");
    }
}

Используйте this для вызова другого конструктора в том же классе

public class Rectangle
{
    public int Width { get; set; }
    public int Height { get; set; }
    
    public Rectangle(int width, int height)
    {
        this.Width = width;
        this.Height = height;
    }
    
    // Конструктор для квадратов
    public Rectangle(int size) : this(size, size)
    {
    }
}

Пример использования:

Rectangle rect = new Rectangle(5, 10);
Rectangle square = new Rectangle(5);  // Создает 5x5

Ключевое слово this всегда ссылается на текущий экземпляр объекта. Это особенно полезно, когда имена параметров совпадают с именами полей или свойств, что делает ваш код более понятным и предотвращает ошибки.

challenge icon

Задание

Средне

Дополните класс Product, добавив конструктор, который использует ключевое слово this для присвоения значений параметров свойствам. Также реализуйте метод GetDescription(), используя this для доступа к свойствам.

Метод GetDescription() должен возвращать: "{Name} costs ${Price}"

Шпаргалка

Ключевое слово this ссылается на текущий экземпляр класса и используется для доступа к членам экземпляра.

Используйте this, чтобы различать поля и параметры с одинаковыми именами:

public class Person
{
    private string name;
    private int age;
    
    public Person(string name, int age)
    {
        this.name = name;
        this.age = age;
    }
}

Без this параметр перекрывает поле и присваивает значение самому себе:

// Это не будет работать так, как ожидается
public Person(string name, int age)
{
    name = name;  // Присваивает параметр самому себе!
    age = age;    // Присваивает параметр самому себе!
}

Используйте this со свойствами:

public class Product
{
    public string Name { get; set; }
    public decimal Price { get; set; }
    
    public Product(string name, decimal price)
    {
        this.Name = name;
        this.Price = price;
    }
    
    public void DisplayInfo()
    {
        Console.WriteLine($"{this.Name}: ${this.Price}");
    }
}

Используйте this для вызова другого конструктора в том же классе (цепочка конструкторов):

public class Rectangle
{
    public int Width { get; set; }
    public int Height { get; set; }
    
    public Rectangle(int width, int height)
    {
        this.Width = width;
        this.Height = height;
    }
    
    // Конструктор для квадратов
    public Rectangle(int size) : this(size, size)
    {
    }
}

Rectangle square = new Rectangle(5);  // Создает 5x5

Попробуйте сами

using System;

class Program
{
    static void Main()
    {
        string name = Console.ReadLine();
        decimal price = decimal.Parse(Console.ReadLine());
        
        Product product = new Product(name, price);
        
        Console.WriteLine($"Product: {product.Name}");
        Console.WriteLine($"Price: ${product.Price}");
        Console.WriteLine(product.GetDescription());
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование