Страницы

Поиск по вопросам

среда, 3 апреля 2019 г.

Конструкция return this

Всем привет. Возник вопрос, что означает return this;, который обычно встречается в методах? В пользовательском конструкторе this используется когда, поля класса и аргументы конструктора имеют одинаковое имя, как здесь:
public IntValue(int value) { this.value = value; }
А что означает return this;, не очень понятно? Я думаю эту запись ввели для сокращения кода, и возможно обойтись как-то без return this;, если такое возможно покажите? Если я правильно понял, то код, который я привёл ниже в реализация интерфейса - IEnumerable возвращает экземпляр класса UserCollection приведенный к базовому интерфейсному типу и this в данном случае это и есть ссылка на экземпляр класса UserCollection?
namespace InterIEnumerable { // Класс UserCollection коллекция (набор) объектов класса Element. // Для применения foreach, необходимо, чтобы класс реализовывал интерфейс - IEnumerable. public class UserCollection : IEnumerable, IEnumerator { public Element[] elementsArray = null;
public UserCollection() { elementsArray = new Element[4]; elementsArray[0] = new Element("A", 1, 10); elementsArray[1] = new Element("B", 2, 20); elementsArray[2] = new Element("C", 3, 30); elementsArray[3] = new Element("D", 4, 40); }
// Указатель текущей позиции элемента в массиве. int position = -1;
// ------------------------------------------------------------------------------------------------------------------ // Реализация интерфейса IEnumerator.
// Передвинуть внутренний указатель (position) на одну позицию. public bool MoveNext() { if (position < elementsArray.Length - 1) { position++; return true; } else { return false; } }
// Установить указатель (position) перед началом набора. public void Reset() { position = -1; }
// Получить текущий элемент набора. public object Current { get { return elementsArray[position]; } }
// ----------------------------------------------------------------------------------------------------------------- // Реализация интерфейса - IEnumerable.
IEnumerator IEnumerable.GetEnumerator() { return this as IEnumerator; } } }


Ответ

Ээхм.
this.value — это не магическая конструкция, означающая «не тот value, а другой, который я имею в виду».
this — это ссылка на вполне конкретный объект, и this.value — это совершенно обыкновенное обращение к полю этого объекта. Этот вызов ничем не отличается от вызова obj.value по другой ссылке (если, конечно, тип ссылки obj такой же).
Внутри нестатических методов объекта this является ссылкой на этот объект. Вне нестатических методов пользоваться this нельзя. Соответственно, если вы возвращаете ссылку на this, вы возвращаете ссылку на объект, в тором выполняется тот самый метод, откуда вы пытаетесь вернуть значение.
Никакой мистики.

Комментариев нет:

Отправить комментарий