首页新闻找找看学习计划

接口这样实现有什么好处?

0
悬赏园豆:10 [已解决问题] 解决于 2013-10-09 16:28
  public interface IRouteHandler
    {
        IHttpHandler GetHttpHandler(RequestContext requestContext);
    }
    public class MvcRouteHandler : IRouteHandler {
        protected virtual IHttpHandler GetHttpHandler(RequestContext requestContext) {
            return new MvcHandler(requestContext);
        }

        #region IRouteHandler Members
        IHttpHandler IRouteHandler.GetHttpHandler(RequestContext requestContext) {
            return GetHttpHandler(requestContext);
        }
        #endregion
    }

这里为什么先用虚方法?
hEnius的主页 hEnius | 初学一级 | 园豆:175
提问于:2013-10-09 15:53
< >
分享
最佳答案
1

虚方法的好处在于:以后可以被其它类直接继承该类,并且重写这个方法(比如都是要实现MVC模式的,但是可能某些特殊的MVC请求模式需要验证用户登录信息等,可能根据request参数判断),那么直接继承这个类重写这个方法,判断request获取参数做相应处理即可。

收获园豆:5
Serviceboy | 菜鸟二级 |园豆:211 | 2013-10-09 16:04

那为什么后面还要在写一个

IHttpHandler IRouteHandler.GetHttpHandler(RequestContext requestContext){}

函数呢?

hEnius | 园豆:175 (初学一级) | 2013-10-09 16:09

@hEnius: 第二个方法实际上是调用第一个保护方法的。这样做的好处在于对于页面(接口)而言,它无需知道子类是如何实现重写了那个保护方法,只要公开调用那个公开的public(实现接口的方法)就可以了。

Serviceboy | 园豆:211 (菜鸟二级) | 2013-10-09 16:13
其他回答(1)
1

虚方法可以被重写,如果从MvcRouteHandler派生子类那么可以重写该方法。  

//也可以直接这么写。
public virtual IHttpHandler IRouteHandler.GetHttpHandler(RequestContext requestContext)
        {
            return GetHttpHandler(requestContext);
        }
收获园豆:5
写代码的小2B | 园豆:4346 (老鸟四级) | 2013-10-09 16:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册