2010年11月26日星期五

自定义HttpModule遇到的问题 解答Shadow和OverLoads及Overrides的区别

自定义的IHttpModule孙子CustomModule没有被Load的问题,搞清楚了。
其实并不是没有被Load,而是没有VB.net的语法问题,导致的执行BaseHttpModule的方法,而不是孙子CustomModule的方法。
具体情况是:
————————————————
类层次:
BaseHttpModule
   Implements IHttpModule
  ————————————————
CustomModule
   Inherits BaseHttpModule
————————————————
BaseHttpModule中的Init(context As HttpApplication)是Overridable的,
在子类CustomModule中可以被Overrides的。
刚开始没有注意到这个Overridable,简单写成了OverLoads才出的问题。
还改成了Shadow,结果也不行,最后才注意到这个Overridable。

顺便说一下,Shadow和OverLoads及Overrides的区别。
Overrides :通过Interface和具体类型名生成实体后,调用其方法的时候,实际调用的是最底层的实现逻辑。有时候在方法的开头会加上
例如MyBase.Init(context)
这样一句,目的是基类逻辑执行完之后,在执行自己的具体逻辑。

Shadow    通过Interface和具体类型名生成实体后,调用其方法的时候,实际调用的是最上层类的实现逻辑。底层的都被隐藏掉了。所以一般少用。

OverLoads    原意是重载。同一类中方法重载可以省略OverLoads,但是父子类中方法的重载,必须加上OverLoads。同参数的重载也是可以的,但是通过Inteface来调用的时候,只会调用上层的方法,类似于Shadow,底层的被隐藏了。想不被隐藏,还是得用Overrides明确。

没有评论: