Привет всем жаль, но вы должны получить это все время, я пытался найти его, но не мог найти ничего конкретного, что я ищу.
В основном я в значительной степени знаю VB.NET полностью, и я постоянно использую его, то, что я хочу получить, - это С#, поэтому я решил использовать свое свободное время, чтобы попытаться схватить это. Я делаю это, используя один из своих старых двоичных объектов VB.NET и конвертируя его вручную (на самом деле не использую конвертер, поскольку я хочу изучить его, а не просто его преобразовать). Однако я использую Интернет для руководства. Пока я пытаюсь создать пользовательские четные обработчики, мой предыдущий код VB.NET был следующим:
Public Event BeforeExecution_Handler()
но делать это на С# кажется немного более сложным, и я сделал следующее
public event BeforeExecution_HandlerEvent BeforeExecution_Handler;
public delegate void BeforeExecution_HandlerEvent();
Во-первых, это не правильно, но во-вторых, что здесь происходит, почему мне нужно дважды создавать определения для него. У меня есть предположение, что в разделе делегата вы помещаете переменные, но почему это так. Может кто-нибудь объяснить
В 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);
EventHandler
или универсальную версию EventHandler<TEventArgs>
. Первый даст вам delegate void EventHandler(object sender, EventArgs e
который будет использоваться с пустыми EventArgs. Последний дает вам то же самое, но с вашими пользовательскими TEventArgs
качестве второго параметра.
public event EventHandler BeforeExecution_Handler;
?