微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.NET中的影子事件

在VB.NET中有一个关键字’shadows’.假设我有一个名为’Jedi’的基类和一个名为’Yoda’的派生类,它继承自’Jedi’.如果我在’Jedi’中声明了一个名为’ForcePush’的方法,并在’Yoda’中声明了阴影,那么当在’Yoda’类的实例上调用方法时,它将忽略基类实现并使用派生类的实现.但是,如果我有一个’Yoda’的实例,它最初被声明为’Jedi’类型,即Dim j为Jedi = new Yoda(),并在实例上调用’ForcePush’方法,它将使用Jedi实现.

现在假设我有一个名为’UsingForce’的事件,当调用’ForcePush’方法时会引发该事件,并且我在派生类中隐藏事件(这是因为’Yoda’有一个接口’IForcePowers’声明这个事件)每个班级都会举起各自的活动.

如果我有一个’Yoda’实例被声明为’Jedi’类型(如上所述)并且我在’Jedi’的’UsingForce’事件上放置一个事件处理程序,然后”中调用’ForcePush’方法’尤达的课程,这个活动处理程序会到达吗?

在VB.NET中使用shadows关键字意味着您声明一个存在于任何继承层次之外的全新成员.这就是为什么关键词(和相关的练习)通常被认为是“臭”(虽然有些人反对这个特定的术语,我觉得它很合适).这种“遮蔽事物”模式背后的原因是什么?这种方法通常用于没有其他方法可以完成所需的情况.继承和重写方法不是一种选择吗?

在任何情况下,如果你在较低的类中“遮蔽”事件,那么不,没有可能的方法让继承链的更远的类直接触发事件,因为他们不知道它甚至存在.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐