Я - программист VB, прокладывающий себе путь в C#. Я изучил, как создать и сгенерировать события в vb и нахожу, что он не сделан тот же путь в C#. Сделал, чтобы кто-либо столкнулся со статьей, которая поможет мне понять, как сделать события в C# и возможно объяснить, почему это отличается в VB.
Спасибо
Источник:
http://msdn.microsoft.com/en-us/library/aa645739 (VS.71) .aspx
Событие в C # - это способ для класса {{1 }} предоставляют уведомления клиентам этого класса, когда с объектом происходит что-то интересное . Наиболее события используются в графических пользовательских интерфейсах; как правило, классы, представляющие элементы управления в интерфейсе, имеют события, которые уведомляются, когда пользователь что-то делает с элементом управления (например, щелкает значок { Кнопку {1}}).
Однако события не обязательно использовать только для графических интерфейсов. События предоставляют обычно полезный способ для объектов сигнализировать об изменениях состояния, которые могут быть полезны для клиентов этого объекта . События являются важным строительным блоком для создания классов , которые можно повторно использовать в большом количестве различных программ.
Остальное см. В статье.
Основное различие заключается в используемом синтаксисе. Внизу они используют одни и те же механизмы в CLR.
Однако VB.NET предоставляет специальный синтаксис через WithEvents
и Handles
, позволяя вам делать:
Dim WithEvents button1 As Button
Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyButton.Click
' Handle button click
End Sub
C# не предоставляет эквивалента - все события должны быть явно подписаны через event +=
, что больше похоже на оператор VB.NET AddHandler
.
Хороший краткий общий справочник по некоторым ключевым различиям в синтаксисе можно найти здесь . Найдите "события", чтобы попасть в этот раздел.
Ключевые отличия заключаются в том, что VB требует, чтобы вы использовали некоторые ключевые слова, а не сложение / вычитание, чтобы связать события, но дает вам ключевое слово обрабатывает автоматически связывает подпрограмму с событием. И при передаче делегата вы должны использовать бессмысленное ключевое слово AddressOf. (Извините за редакционную статью, но я думаю, что это ключевое слово вызывает больше путаницы, чем спасает!)
Разница в основном синтаксическая.
См. эту удобную справку о различиях.
Обработчик событий в VB.NET объявляется с помощью ключевого слова Handling
, добавляемого к сигнатуре обработчика событий. В C# вам нужно использовать его регистрацию с помощью +=
.
В VB.NET вы вызываете событие с помощью RaiseEvent
, в C# вы вызываете делегат напрямую.