Ключевое слово '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 всегда ссылается на текущий экземпляр объекта. Это особенно полезно, когда имена параметров совпадают с именами полей или свойств, что делает ваш код более понятным и предотвращает ошибки.
Задание
СреднеДополните класс 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());
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыПространства имен и директивыВведение в классы и объектыКлючевое слово 'this'Методы и параметрыПоля и свойстваКонструкторыИнициализаторы объектовИтоги — Простой калькулятор4Наследование
Основы синтаксиса наследования (:)Ключевое слово 'base'Ключевые слова Virtual и OverrideЗапечатанные классыБазовый класс 'object'Итоги — Иерархия сотрудников7Продвинутые возможности
Перегрузка операторовИндексаторы (this[])Переопределение ToString()Методы расширенияПовторение — Пользовательский список10Паттерны проектирования. Часть 1
Введение в паттерны проектированияПотокобезопасный SingletonПаттерн FactoryПаттерн Observer (События)Паттерн Strategy13Финальные испытания
Платформа для онлайн-обученияКомпонент игрового персонажаСервис аренды транспорта2Свойства и статические члены
Автоматически реализуемые свойстваСвойства только для чтения и записиСтатические поля и методыСтатические классыЧлены в виде выражений5Полиморфизм и интерфейсы
Полиморфизм: компиляция vs выполнениеИнтерфейс vs абстрактный классМножественные интерфейсыЯвные интерфейсыUpcasting и DowncastingИтоги: Калькулятор фигур8Продвинутые концепции ООП
Композиция вместо наследованияGenerics (классы и методы)Делегаты и событияАтрибуты и рефлексияIDisposable и оператор usingОсновы Dependency Injection11Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн Компоновщик3Архитектура классов
Экземплярные и статические данныеКлючевые слова 'readonly' и 'const'Опорные поляПовторение — Менеджер банковских счетов6Инкапсуляция
Модификаторы доступаСвойства для инкапсуляцииРеализация скрытия данныхПаттерны неизменяемостиИтоги — Записи студентов9Переменное количество аргументов
Ключевое слово 'params'Необязательные параметрыИменованные аргументыПерегрузка методов