다른 개발자 용으로 사용할 클래스 라이브러리를 개발 중이며 WithEvents (또는 다른 언어로 유사)를 사용하여 클래스의 인스턴스를 선언하고 사용하도록 허용 할 예정입니다 클래스에 정의 된 대리자입니다. 이런 식으로 여기서 중복되는 건가요?대리자 사용 및 이벤트 선언
Public Delegate Sub TimerElapsedDelegate(ByVal sender As Object, ByVal e As System.EventArgs)
Public Event TimerElapsed(ByVal sender As Object, ByVal e As System.EventArgs)
Private _TimerElapsed As TimerElapsedDelegate = Nothing
아니면 그냥 이벤트를 선언하고 AddHandler 등을 수행해야합니까?
이것에 대한 조언을 주셔서 감사합니다 ... 나는 중복되고 있다고 생각하고 무의미한 코드를 원하지 않습니다. DRY 원칙을 피할 필요가 없습니다.
그냥 "작업"이 클래스 수행의 인스턴스가 별도의 스레드에서 수행되는 코드의 나머지 부분을 게시하고 싶었, 스트레스 {편집}. {/ 편집}
#Region "Delegates"
Public Delegate Sub TimerElapsedDelegate(ByVal sender As Object, ByVal e As System.EventArgs)
Public Event TimerElapsed(ByVal sender As Object, ByVal e As System.EventArgs)
Private _TimerElapsed As TimerElapsedDelegate = Nothing
Public Property OnTimerElapsed() As TimerElapsedDelegate
Get
Return _TimerElapsed
End Get
Set(ByVal value As TimerElapsedDelegate)
If value Is Nothing Then
_TimerElapsed = Nothing
Else
If _TimerElapsed Is Nothing Then
_TimerElapsed = value
Else
_TimerElapsed = System.Delegate.Combine(_TimerElapsed, value)
End If
End If
End Set
End Property
Private Sub TriggerTimerElapsed()
If OnTimerElapsed IsNot Nothing Then
OnTimerElapsed.Invoke(Me, New System.EventArgs)
End If
RaiseEvent TimerElapsed(Me, New System.EventArgs)
End Sub
Public Delegate Sub ItemReadyForQueueDelegate(ByVal sender As Object, ByVal e As System.EventArgs)
Public Event ItemReadyForQueue(ByVal sender As Object, ByVal e As System.EventArgs)
Private _ItemReadyForQueue As ItemReadyForQueueDelegate = Nothing
Public Property OnItemReadyForQueue() As ItemReadyForQueueDelegate
Get
Return _ItemReadyForQueue
End Get
Set(ByVal value As ItemReadyForQueueDelegate)
If value Is Nothing Then
_ItemReadyForQueue = Nothing
Else
If _ItemReadyForQueue Is Nothing Then
_ItemReadyForQueue = value
Else
_ItemReadyForQueue = System.Delegate.Combine(_ItemReadyForQueue, value)
End If
End If
End Set
End Property
Private Sub TriggerItemReadyForQueue(ByVal oItem As h3Budgeteer.FileSystem.ReportTemplateFile.ReportTemplate)
If OnItemReadyForQueue IsNot Nothing Then
OnItemReadyForQueue.Invoke(Me, New ItemReadyForQueueEventArgs(oItem))
End If
RaiseEvent ItemReadyForQueue(Me, New ItemReadyForQueueEventArgs(oItem))
End Sub
Public Class ItemReadyForQueueEventArgs
Inherits System.EventArgs
Private _ReportTemplate As h3Budgeteer.FileSystem.ReportTemplateFile.ReportTemplate = Nothing
Public ReadOnly Property ReportTemplate() As h3Budgeteer.FileSystem.ReportTemplateFile.ReportTemplate
Get
Return _ReportTemplate
End Get
End Property
Public Sub New(ByVal oReportTemplate As h3Budgeteer.FileSystem.ReportTemplateFile.ReportTemplate)
_ReportTemplate = oReportTemplate
End Sub
End Class
이 경우의 "위임"은 기본적으로 자체 양조 이벤트입니다. 나는 그것을 제거 할 것이다. –