Почему в .NET этот обработчик кнопки ссылается на родительский вместо кнопки?

67
7

В javascript DOM this ссылается на элемент, который выглядит более логичным, чем в .NET, где this ссылается на родителя. Почему этот выбор?


Кнопка также является классом. Если бы это был действительно ООП, то он рассматривал бы кнопку как гражданина первого класса. Так что это не вопрос парадигмы здесь, а скорее вопрос реализации. Моя гипотеза заключается в том, что MS, вероятно, было проще, потому что физический модуль существует для родителя, а не для ребенка.


Но для нас очень жаль, так как вам нужно справиться с этим отправителем, который кажется таким, каким он чуждо кнопке, тогда как он сам!

спросил(а) 2011-04-18T10:17:00+04:00 9 лет, 2 месяца назад
1
Решение
79

Это разные системы и разные парадигмы.


В .NET ваши обработчики передаются аргументом "отправитель" , который содержит объект. Обработчики находятся в объекте формы или пользовательском элементе управления, поэтому "this" относится к этому классу (если вы делаете двойной щелчок по типу добавления обработчика). Если вы вручную создали обработчик, он может быть частью любого объекта (необязательно объекта формы), а "this" будет отображаться на разные вещи. События .NET также не подвергаются барботированию или захвату.

В DOM ваши обработчики не передаются аргументом "отправитель" . Однако "this" относится к объекту. В DOM события могут пузыриться или захватываться.


Нет причин, по которым разработчик JavaScript не может предоставить аргумент "отправитель" , а map "this" - обратно к объекту, содержащему обработчик. На мой взгляд, это были лишь исторические выборы, сделанные тогда, когда мир был намного проще.

ответил(а) 2011-04-18T10:26:00+04:00 9 лет, 2 месяца назад
54

В С# обработчики являются методами объекта Form, и поэтому this также ссылается на этот объект.

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

ответил(а) 2011-04-18T10:19:00+04:00 9 лет, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема