Это в принципе правильно, но правильный способ реализации такого события выглядит следующим образом:
Public Property RetainSelBlock() As Boolean
Get
Return sprSpread.RetainSelBlock
End Get
Set
If sprSpread.RetainSelBlock <> value Then
sprSpread.RetainSelBlock = value
OnRetainSelBlockChanged(EventArgs.Empty)
End If
End Set
End Property
Public Event RetainSelBlockChanged As EventHandler
Protected Overridable Sub OnRetainSelBlockChanged(e As EventArgs)
RaiseEvent RetainSelBlockChanged(Me, e)
End Sub
Обратите внимание, что в этом случае событие возникает только в том случае, если значение свойства действительно изменяется.Если вы снова назначите то же значение свойству, событие больше не будет вызываться.Кроме того, этот код следует предполагаемому шаблону использования делегата EventHandler
, чтобы обработчики событий имели предполагаемую непротиворечивую подпись, а также вызывали событие только с помощью специального метода, который можно переопределить в производных классах, чтобы обеспечить настраиваемое поведение унаследованныхevent.
Обратите внимание, что вы также можете реализовать интерфейс INotifyPropertyChanged
в классе, который имеет это свойство, а затем вызвать событие PropertyChanged
.Это может быть ближе к VB6, хотя я не уверен.Приятно то, что у вас есть только одно событие, поэтому вы пишете меньше кода для производителя и потребителя, поэтому хорошо, если у вас много свойств.Недостатком является то, что вам необходимо написать условный код в приемнике, чтобы определить, какое свойство изменилось, вместо того, чтобы иметь отдельные обработчики событий для каждого свойства.
РЕДАКТИРОВАТЬ: Также не более правильное имя 'RetainSelBlockChange д ', а не RetainSelBlockChange
.Принято использовать суффикс «Изменено» для события, которое вызывается после изменения значения свойства, и «Изменение» для события, которое вызывается до изменения свойства и позволяет отменить изменение.