Неожиданный результат asp.net при перегрузке метода базового класса - PullRequest
1 голос
/ 16 ноября 2011

В приложении asp.net webforms я создал базовый класс для своих страниц. Я объявил метод загрузки страницы в базовом классе следующим образом:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Response.Write("base")
End Sub

Теперь в классе, который наследует этот класс, я снова использовал метод загрузки страницы:

Protected Shadows Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Response.Write("descendant")
End Sub

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

Спасибо, JS

1 Ответ

2 голосов
/ 16 ноября 2011

Метод Page_Load привязан к событию Page.Load.Если вы добавляете метод Page_Load в свой подкласс, платформа автоматически добавляет этот метод в качестве обработчика в дополнение к базовому классу.Код, полученный из прекомпилятора, может выглядеть примерно так, и поэтому оба метода выполняются после возникновения события Load:

// VB.net (no idea if this really compiles, I'm more into C#)
AddHandler Load, AddressOf BaseClass.PageLoad
AddHandler Load, AddressOf SubClass.PageLoad
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...