【发布时间】:2013-06-26 20:53:37
【问题描述】:
是否可以通过属性访问器监听父类对象的事件?
我尝试过的(一个最小的例子):
Public Class ParentFoo
Private WithEvents m_bar As EventyObj
Public Property Bar() As EventyObj
Get
Return m_bar
End Get
Set(ByVal value As EventyObj)
m_bar = value
End Set
End Property
End Class
Public Class ChildFoo
Inherits ParentFoo
[...]
Public Sub Bar_OnShout() Handles Bar.Shout
' Some logic
End Sub
End Class
我收到的特定错误消息 (VS2005) 是“Handles 子句需要在包含类型或其基本类型之一中定义的 WithEvents 变量。”通过公共属性访问私有 WithEvents 变量会去掉“WithEvents”吗?
【问题讨论】:
-
我不明白你想在这里实现什么。子类派生自父类,因此它可以直接访问您提供给父类的任何成员!因为它“是”父类。试着解释你的目标是什么。
-
@DonA:这不准确。 ChildFoo 不能直接访问 m_bar,因为它在父类中被声明为“Private”。我可以通过声明它受保护来解决这个问题,但除非我绝对必须这样做,否则我宁愿不这样做。我想要实现的是通过访问器属性,通过现有的 WithEvents/Handles 简写来监听私有的父类对象的事件。
-
我明白了,我的意思是您可以访问会员 - 这不是您想要的吗?我不认为事件会像那样对你有用。
-
我认为我们正在谈论彼此。我无法直接访问私人会员;我可以通过属性访问它,但由于某种原因,WithEvents 被剥夺了。我很好奇为什么