hmc*_*iii 3 .net vb.net events derived-class
好的,所以我有一个声明事件的基类StatusTextChanged.我的孩子班,当然不能直接举起这个活动.
所以我结束了这样的事情(为简单起见):
Public MustInherit Class FooBase
Public Event StatusTextChanged(ByVal StatusText As String)
Protected Sub RaiseStatusTextChangedEvent(ByVal StatusText As String)
RaiseEvent StatusTextChanged(StatusText)
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
然后在我打电话的儿童班
MyBase.RaiseStatusTextChangedEvent("something").是否有更好或更推荐的方法来做到这一点?
编辑:VB.NET或C#,它的工作方式基本相同.
编辑:所以在响应之后,我在基类中,然后只在子类中设置StatusText属性...
Public Event StatusTextChanged(ByVal StatusText As String)
Private _StatusText As String = "Idle."
Public Property StatusText() As String
Get
Return _StatusText
End Get
Protected Set(ByVal value As String)
RaiseEvent StatusTextChanged(value)
End Set
End Property
Run Code Online (Sandbox Code Playgroud)
我会说你非常接近推荐的方式(或者至少是我推荐的方式).
在给出选择的情况下,我会对您的代码进行一些更改:
Protected OverridablePublic Event StatusTextChanged As EventHandler(Of YourCustomEventArgs)结果代码:
自定义eventargs类:
Public Class TextEventArgs
Inherits EventArgs
Private _text As String
Public Sub New(ByVal text As String)
_text = text
End Sub
Public ReadOnly Property Text() As String
Get
Return _text
End Get
End Property
End Class
Run Code Online (Sandbox Code Playgroud)
基类中的事件实现:
Public Event StatusTextChanged As EventHandler(Of TextEventArgs)
Protected Overridable Sub OnStatusTextChanged(ByVal e As TextEventArgs)
RaiseEvent StatusTextChanged(Me, e)
End Sub
Run Code Online (Sandbox Code Playgroud)
...最后是一个提升事件的代码行; 无论是在基类中还是在继承它的类中:
OnStatusTextChanged(New TextEventArgs("some text"))
Run Code Online (Sandbox Code Playgroud)
这将更符合.NET框架其余部分中事件的设计方式.