Подтвердить что ты не робот

Page_Init vs OnInit

Между обработкой события Page_Init или переопределением метода OnInit страницы, какой из них лучше использовать? Благодарю.

4b9b3361

Ответ 2

Переопределение метода базового типа предпочтительнее, поскольку виртуальный вызов проще и чище, чем создание делегата, связавшего событие с группой методов.

Кроме того, полагаясь на AutoEventWireup, установленный на true, вы указываете накладные расходы на разбор кода вашей страницы, поскольку ASP.NET должен будет создать для вас всех делегатов во время выполнения.

Ответ 3

В принципе, нет разницы в этих двух appoaches. Что сделано в OnInit в классе страницы:

protected internal override void OnInit(EventArgs e)
{
    base.OnInit(e);
    if (this._theme != null)
    {
        this._theme.SetStyleSheet();
    }
    if (this._styleSheet != null)
    {
        this._styleSheet.SetStyleSheet();
    }
}

Если мы откроем base.OnInit, мы увидим, что это место, где запущен Page_Init:

protected internal virtual void OnInit(EventArgs e)
{
    if (this.HasEvents())
    {
        EventHandler handler = this._occasionalFields.Events[EventInit] as EventHandler;
        if (handler != null)
        {
            handler(this, e);
        }
    }
}

Таким образом, в этих двух подходах нет разницы. Однако вам нужно вызвать base.OnInit в вашем методе overriden, если вы решите использовать переопределение вместо события. И еще одно отличие заключается в том, что если вы используете переопределение, вы можете запустить некоторый код сразу после применения темы.

С уважением.

P.S. Единственное, что я рекомендую, это использовать один и тот же подход во всем приложении.

Ответ 5

OnInit лучше, потому что он находится на инициализации уровня класса, в то время как инициация страницы может иметь избыточный эффект, потому что вы должны проверить, является ли это обратной передачей или нет.

Ответ 6

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