VB to C# - автоматическое именование обработчиков событий и явное подключение

Извините, если это дубликат; Я много искал объяснения.

TL; DR - я уже знаю, как подключать события, мой вопрос касается поддержки информации и соглашения об именах обработчиков событий, на которые я не могу найти ответ. Уже прочитав здесь, здесь, здесь, здесь и здесь, я думаю, информационная перегрузка сбила меня с толку, или я упускаю из виду очевидное.

У меня есть огромное решение для веб-форм (VB), которое необходимо конвертировать в C#, начиная с некоторых проектов Web Forms Server Control. В каждом VB использует Handles слово для подключения обработчиков событий:

Public Class Accordion
    Inherits CompositeControl

    Private Sub Accordion_Init(sender As Object, e As System.EventArgs) Handles Me.Init

    End Sub

    Private Sub AccordionPanelHolder_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    End Sub

    Private Sub AccordionPanelHolder_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender

    End Sub

End Class

При использовании любого вида преобразователя кода, и из моего исследования, подход C# означает ручное подключение обработчиков событий (код сокращен для краткости):

public Accordion()
{
    PreRender += AccordionPanelHolder_PreRender;
    Load += AccordionPanelHolder_Load;
    Init += Accordion_Init;
}
private void AccordionPanelHolder_PreRender(object sender, System.EventArgs e)
{
    // ...
}

Я доволен вышесказанным, однако, если я создаю новую веб-форму в VS, то код по умолчанию просто так:

public partial class TestPage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // to do
    }
}

На странице нет логики обработчика событий. я вижу это AutoEventWireUp="True"когда обычно я бы это False, Поэтому мои вопросы:

  1. Что / Где определено соглашение об именах, которое C# использует для автоматического подключения обработчиков событий, как в последнем примере? Я нервничаю, что методы могут работать дважды. Я вижу, что VS не имеет функции раскрывающегося списка для C# для создания пустых обработчиков событий, которые подключены.
  2. Если AutoEventWireUp="False"Должен ли я вручную подключать каждое событие (я ожидаю, что это хорошо [я думаю...])?

2 ответа

Решение

Когда AutoEventWireUp Это правда, будут искать следующие методы:

  • Page_PreInit
  • Page_Init
  • Page_InitComplete
  • Page_PreLoad
  • Page_Load
  • Page_LoadComplete
  • Page_DataBind
  • Page_SaveStateComplete
  • Page_PreRender
  • Page_PreRenderComplete
  • Page_Unload
  • Page_Error
  • Page_AbortTransaction
  • Page_CommitTransaction

Итак, методы должны использовать это точное имя.

Если вы установите AutoEventWireUp в false, вы должны будете добавить обработчик для любого из этих событий вручную.

Вы можете посмотреть здесь для получения дополнительной информации.

Не совсем уверен, что это правильный ответ, но вы должны думать о нем как о событии, когда оно необходимо. Если это от создания вашего класса, вы можете добавить хуки в конструкторе или как в asp.net делегат Page_Load.

Что-то вроде этого

void Page_Load(object sender, EventArgs e)
{
    PreRender += AccordionPanelHolder_PreRender;
    Load += AccordionPanelHolder_Load;
    Init += Accordion_Init;
}

Но давным-давно я работал с веб-формами, так что, возможно, я кое-что забыл, но это похоже на то, как я делал бы это в обычном приложении на C#.

Другие вопросы по тегам