2016-08-10 4 views
1

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

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

Public Event BeforeExecution_Handler() 

, но делает это в C#, кажется, немного более хитрым и я сделал следующее

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

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

+0

'public event EventHandler BeforeExecution_Handler;'? –

+0

Привет, да, я знаю об этом, но я не хочу его преобразовывать, я хочу его изучить. Поэтому, почему я принял этот подход, иначе я буду полагаться на эти инструменты, никогда не зная, что на самом деле необходимо. Снова этот вопрос связан с тем, почему мне нужно как событие, так и делегат, я что-то упускаю? –

+0

Я не понимаю –

ответ

4

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

Декларация:

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

Призвание:

RaiseEvent MsgArrived("foo") 

В C# у вас есть для использования делегатов.

Декларация:

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

Призвание:

MsgArrivedEvent("Test message"); 

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

Декларация:

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

Призвание:

RaiseEvent MsgArrivedEvent("foo") 

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

public delegate void MsgArrivedEventHandler(object sender, EventArgs e); 
+0

Стоит также упомянуть, что в большинстве случаев достаточно использовать «EventHandler» или общую версию «EventHandler ». Первый даст вам делегат void EventHandler (отправитель объекта, EventArgs e', который будет использоваться с пустыми EventArgs. Последний дает вам то же самое, но с вашим пользовательским «TEventArgs» в качестве второго параметра. –

Смежные вопросы