VB.NET编程语言中有两种比较重要的访问器,一种是属性访问器,另一种则是VB.NET事件访问器。在这里我们会针对这两种访问器做一个详细的介绍,尤其是VB.NET事件访问器的相关应用方式。
VB.NET属性访问器的可访问性
以前,一个一直困扰我的问题就是VB.NET中Get和Set访问器必须具有相同的可访问性(Public、Friend、或Private)。如果你想创建一个只读的Public属性(只有Get被公开),那么在你的组件中并没有Set访问器来强制确认或者自定义属性的处理。
现在,VisualBasic2005中的Get和Set访问器可以设置不同的可访问性了,只是Set在访问上必须比Get更受限制:
- Private_myPropAsString
- PublicPropertyMyProp()AsString
- Get
- Return_myProp
- EndGet
- FriendSet(ByValvalueAsString)
- Ifvalue.Trim.Length>0Then
- _myProp=value.Trim
- Else
- value="<novalue>"
- EndIf
- EndSet
- EndProperty
无论是对于团队开发环境还是对于为了努力追求代码***重用率的个人开发者,这个特性都相当有用。
自定义VB.NET事件访问器
VB.NET事件访问器允许你定义一个自定义事件,并且,你可以控制在当客户端添加或删除了事件处理器并引发你的事件后所发生的情况。假设你有一个自定义的类,在该类中你引发了一个RateChanged事件。你可以按照下面两种方式其中一种来声明普通的事件:
- PublicEventRateChanged()
- ''或者
- PublicEventHoursChangedAsEventHandler
用这种方式声明事件会产生一个自动托管的后备存储。换言之,系统将处理事件托管和分派的方式。通常情况下这就很好了,但是有时候,你需要对如何通知事件监听器的方式拥有更多的控制。
你可以利用这个新的Custom关键字来定义一个自定义事件以及它的访问修饰符。当你在事件声明上敲下回车键后,VisualBasic2005将为你自动生成代码原形,其生成方式就像Property访问器那样:
- PublicCustomEventNameChangedAsEventHandler
- AddHandler(ByValvalueAsEventHandler)
- ''把处理器与后备存储挂钩
- EndAddHandler 软件开发网
- RemoveHandler(ByValvalueAsEventHandler)
- ''从后备存储中删除处理器
- EndRemoveHandler
- RaiseEvent(ByValsenderAsObject,ByValeAsEventArgs)
- ''激发监听器
- EndRaiseEvent
- EndEvent
当客户端为你的事件添加或删除了一个处理器后,AddHandler或RemoveHandler历程开始运作。而当事件被引发后,RaiseEvent历程开始执行。通过这种方式,你可以按照你想要为事件托管后备存储的方式来采取特别的操作。当你用这种方式创建了这些自定义事件,你就可以把该事件当作属性来看待。
一个展示了自定义VB.NET事件访问器有用一面的例子,就是当你的对象是可序列化的、并且你有一个可以被一个不可序列化的委托对象处理的事件的时候。如果你试图通过一个普通事件来序列化你的对象,序列化就会失败,这是因为后备该事件的存储是不可序列化的。
【编辑推荐】