dna*_*oli 6 .net vb.net event-handling shadows
在VB.NET中有一个关键字'shadows'.假设我有一个名为'Jedi'的基类和一个名为'Yoda'的派生类,它继承自'Jedi'.如果我在'Jedi'中声明了一个名为'ForcePush'的方法,并在'Yoda'中声明了阴影,那么当在'Yoda'类的实例上调用该方法时,它将忽略基类实现并使用派生类的实现.但是,如果我有一个'Yoda'实例,它最初被声明为'Jedi'类型,即Dim j as Jedi = new Yoda()在实例上调用'ForcePush'方法,它将使用Jedi实现.
现在假设我有一个名为'UsingForce'的事件,当调用'ForcePush'方法时会引发该事件,并且我在派生类中隐藏事件(这是因为'Yoda'有一个接口'IForcePowers'声明这个事件)每个班级都会举起各自的活动.
如果我有一个'Yoda'实例被声明为'Jedi'类型(如上所述)并且我在'Jedi'的'UsingForce'事件上放置一个事件处理程序,然后''中调用'ForcePush'方法'尤达的课程,这个活动处理程序会到达吗?
在 VB.NET 中使用shadows关键字意味着您正在声明一个全新的成员,该成员存在于任何现有的继承层次结构之外。这就是为什么该关键字(以及相关的做法)通常被视为“臭”(尽管有些人反对这个特定术语,但我认为它非常合适)。这种“遮遮掩掩”的模式背后的原因是什么?这种方法通常适用于没有其他方法可以完成您所需要的事情的情况。继承和重写这些方法不是一个选择吗?
无论如何,如果您“隐藏”较低类中的事件,那么不,继承链上的类不可能直接触发该事件,因为它们甚至不知道该事件存在。