VB.NET в C # с обработчиками событий

2

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

В основном я в значительной степени знаю VB.NET полностью, и я постоянно использую его, то, что я хочу получить, - это С#, поэтому я решил использовать свое свободное время, чтобы попытаться схватить это. Я делаю это, используя один из своих старых двоичных объектов VB.NET и конвертируя его вручную (на самом деле не использую конвертер, поскольку я хочу изучить его, а не просто его преобразовать). Однако я использую Интернет для руководства. Пока я пытаюсь создать пользовательские четные обработчики, мой предыдущий код VB.NET был следующим:

Public Event BeforeExecution_Handler()

но делать это на С# кажется немного более сложным, и я сделал следующее

public event BeforeExecution_HandlerEvent BeforeExecution_Handler;
public delegate void BeforeExecution_HandlerEvent(); 

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

  • 0
    public event EventHandler BeforeExecution_Handler; ?
  • 1
    Привет, да, я знаю об этом, но я не просто хочу преобразовать это, я хочу изучить это. Следовательно, почему я выбрал этот подход, иначе я буду полагаться на эти инструменты, никогда не зная, что на самом деле нужно. Опять же, этот вопрос касается того, зачем мне нужно и событие, и делегат, я что-то упустил?
Показать ещё 2 комментария
Теги:
delegates
vb.net-to-c#

1 ответ

5

В VB.NET вы можете неявно создать делегат, так что вы можете просто сделать что-то вроде этого:

Декларация:

Public Event MsgArrivedEvent(ByVal message As String) 'behind the scenes a delegate is created for you

Призвание:

RaiseEvent MsgArrived("foo")

В С# вам нужно использовать делегатов.

Декларация:

public delegate void MsgArrivedEventHandler(string message);
public event MsgArrivedEventHandler MsgArrivedEvent;

Призвание:

MsgArrivedEvent("Test message");

Обратите внимание, что вы также можете явно создать делегат в VB.NET так же, как и С#, но это просто больше набирать, чтобы не получить на самом деле:

Декларация:

Public Delegate Sub MsgArrivedEventHandler(ByVal message As String)
Public Event MsgArrivedEvent As MsgArrivedEventHandler

Призвание:

RaiseEvent MsgArrivedEvent("foo")

Также обратите внимание, что наилучшей практикой является использование класса sender и EventArgs (или унаследованного от него класса) в качестве параметров для Event/Delegate:

public delegate void MsgArrivedEventHandler(object sender, EventArgs e);
  • 0
    Также стоит упомянуть, что в большинстве случаев достаточно использовать EventHandler или универсальную версию EventHandler<TEventArgs> . Первый даст вам delegate void EventHandler(object sender, EventArgs e который будет использоваться с пустыми EventArgs. Последний дает вам то же самое, но с вашими пользовательскими TEventArgs качестве второго параметра.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню