Каково преимущество наличия этого/самого указателя, обязательного явный?

Помогает изменить формулировку и то, как работает диалог. Например, наличие кнопок OK / Отмена позволяет пользователям игнорировать большую часть диалога. Если вы удалите обычные кнопки и замените их более текстовыми ссылками на команды, пользователи с большей вероятностью будут читать каждую кнопку, потому что опция «быстро уходи» недоступна.

17
задан Piotr Dobrogost 26 May 2009 в 11:08
поделиться

6 ответов

Помимо переменных-членов и параметров метода у вас также есть локальные переменные. Одна из самых важных вещей об объекте - его внутреннее состояние. Явное разыменование переменных-членов очень ясно показывает, где вы ссылаетесь на это состояние и где вы изменяете это состояние.

Например, если у вас есть такой код, как:

someMethod(some, parameters) {
    ... a segment of code
    foo = 42;
    ... another segment of code
}

, при быстром просмотре вы должны иметь ментальную модель переменных, определенных в предыдущем сегменте, чтобы знать, является ли это просто временной переменной или она изменяет состояние объектов. Тогда как this.foo = 42 делает очевидным, что состояние объектов изменено. И если явное разыменование используется исключительно, вы можете быть уверены, что в противном случае переменная является временной.

Более короткие, хорошо продуманные методы делают ее немного менее важной, но все же,

21
ответ дан 30 November 2019 в 12:07
поделиться

Если вы говорите о «явном self » в смысле Python, вот интересное обсуждение по этой теме. Вот Гвидо, отвечающий на статью Брюса Эккеля . Комментарии к статье Брюса также поучительны (во всяком случае, некоторые из них).

4
ответ дан 30 November 2019 в 12:07
поделиться

Он необходим для передачи указателя / ссылки на текущий объект в другом месте или для защиты от самоприсваивания в операторе присваивания.

3
ответ дан 30 November 2019 в 12:07
поделиться

Что, если аргументы метода имеют то же имя, что и переменные-члены? Затем вы можете использовать, например, this.x = x . Где this.x - переменная-член, а x - аргумент метода. Это всего лишь один (тривиальный) пример.

3
ответ дан 30 November 2019 в 12:07
поделиться

Обычно я использую это (в C ++) только при написании оператора присваивания или конструктора копирования , поскольку это помогает четко идентифицировать переменные . Другое место, где я могу подумать об его использовании, - это если имена переменных параметров вашей функции такие же, как имена переменных-членов, или я хочу убить свой объект, используя , удалите это .

2
ответ дан 30 November 2019 в 12:07
поделиться

Например, имена участников совпадают с именами, переданными методу

public void SetScreenTemplate(long screenTemplateID, string screenTemplateName, bool isDefault)
        {
            this.screenTemplateID = screenTemplateID;
            this.screenTemplateName = screenTemplateName;
            this.isDefault = isDefault;
        }
1
ответ дан 30 November 2019 в 12:07
поделиться