Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
 Аватар для Enifan
1848 / 1190 / 501
Регистрация: 14.10.2018
Сообщений: 3,211

Параметр this в конструкторе, методе

27.11.2019, 16:18. Показов 4497. Ответов 6

Студворк — интернет-сервис помощи студентам
Рассмотрим на примере узла (Node) кольцевого двусвязного списка. Значения первого узла (Next, Prev) будут указывать на текущий класс.
C#
1
2
3
4
5
class Node
{
    Node Next;
    Node Prev;
}
Конструктор 1. (нужный конструктор для this() имеется) Компилятор ругается на 2 аргумента this
C#
1
    public Node() : this(this, this) { }
Конструктор 2. Компилятор ругается на 2 значения по умолчанию this. Тоже самое с любым методом
C#
1
    public Node(Node next = this, Node prev = this) { }
Конструктор 3. Все работает
C#
1
2
3
4
5
    public Node()
    {
        Next = this;
        Prev = this;
    }
Вопрос: где та тонкая грань, при которой можно использовать this?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.11.2019, 16:18
Ответы с готовыми решениями:

Работа аргументов в методе и конструкторе
Добрый день!Буду благодарен, если кто-нибудь пошагово объяснит, как аргументы в методе передаются в конструктор, что-то меняют там и выдают...

Параметр в конструкторе копирования
Есть класс class CMatrix{ valarray<valarray<double> > matrix; public: CMatrix(const CMatrix &M); ..... }; ...

this - параметр метода, который вызывается в конструкторе
Здарствуйте. Имеется следующий код: import javax.swing.*; import java.awt.*; class EditorTabbedPane extends JTabbedPane { ...

6
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
27.11.2019, 16:33
Цитата Сообщение от Enifan Посмотреть сообщение
Компилятор ругается на 2 значения по умолчанию this.
Значение параметра по умолчанию должно быть константой, а this это не константа, поэтому его нельзя использовать как значение по умолчанию.
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
27.11.2019, 16:51
Лучший ответ Сообщение было отмечено Элд Хасп как решение

Решение

Цитата Сообщение от Enifan Посмотреть сообщение
где та тонкая грань, при которой можно использовать this?
Не тонкая, а вполне четко определенная.
Ссылку this можно использовать ровно в трех местах:
  1. В теле конструктора экземпляра
  2. В теле метода экземпляра
  3. В теле акцессора свойства экземпляра

Первый вариант не проходит, т.к. ссылка используется вне тела конструктора, второй вариант не подходит из-за того, что this — не константное выражение, а третий вариант ОК, т.к. попадает под первый пункт.
3
68 / 38 / 11
Регистрация: 07.11.2019
Сообщений: 136
27.11.2019, 17:36
kolorotur,
4. В индексаторах
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
27.11.2019, 17:49
Цитата Сообщение от Ourn Посмотреть сообщение
4. В индексаторах
Если вы про объявление, то это не ссылка, а если про реализацию, то это акцессоры, т.е. пункт 3.
0
68 / 38 / 11
Регистрация: 07.11.2019
Сообщений: 136
27.11.2019, 18:15
Лучший ответ Сообщение было отмечено kolorotur как решение

Решение

Цитата Сообщение от kolorotur Посмотреть сообщение
Если вы про объявление, то это не ссылка, а если про реализацию, то это акцессоры, т.е. пункт 3.
Я о том, что свойство все же не тождественно равно индексатору. Наверно точнее всего будет
3. В теле акцессора свойства или индексатора экземпляра

Согласны?
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
27.11.2019, 20:52
Цитата Сообщение от Ourn Посмотреть сообщение
что свойство все же не тождественно равно индексатору.
У индексатора есть акцессоры: get и set.
За их пределами в индексаторе использование this невозможно.

Цитата Сообщение от Ourn Посмотреть сообщение
3. В теле акцессора свойства или индексатора экземпляра
Согласны?
Да тут наше с вами согласие или несогласие никакой роли не играет — ограничения определены спецификацией языка:
A this_access is permitted only in the block of an instance constructor, an instance method, or an instance accessor.
Добавлено через 3 минуты
Ourn, хотя, я понял что вы имели в виду: у меня в третьем пункте конкретно прописано "свойства".
Конечно, индексатор тоже туда входит. Надо было просто написать "в акцессорах", без "свойства".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.11.2019, 20:52
Помогаю со студенческими работами здесь

Можно ли в конструкторе копирования поменять один параметр?
Здравствуйте. Мне нужно при создании объекта через конструктор копирования поменять один параметр в конструкторе. Такое можно реализовать?

MySqlDataAdapter: что за параметр в fill методе
Есть код. MySqlCommand com = null; com = new MySqlCommand("my_procedure", con); com.CommandType =...

Const параметр в методе и приведение типов
Метод с константным параметром ссылкой void MyClass::MyMethod(const QString &s) { QDebug<<s; } использование метода QChar ch...

SetTimer в конструкторе класса, функция-член которого параметр
Приветствую. Как передать функцию TimerComplete() как 4-й параметр функции SetTimer? class TTimerEx { private: String msg; ...

Параметр const T & val = T() в конструкторе шаблонного класса
Добрый день! Начал разбираться с шаблонами и наткнулся на такой пример: template < typename T > struct my_class { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru