代码之家  ›  专栏  ›  技术社区  ›  Nate Cook

web表单和泛型处理程序(ashx文件)是否可以共享一个共同的祖先类(或基页)?

  •  0
  • Nate Cook  · 技术社区  · 16 年前

    如果一个人有ASP.netweb表单都继承自公共基页的web站点—它检查诸如身份验证和会话过期时重定向等内容—是否有方法在ashx处理程序中使用此基类?我开始沿着这条路走下去,在处理程序中继承了基页类,并意识到这可能不是推荐的做法。关于如何避免这里的代码重复有什么想法吗?

    这个能吗

    public class FooHandler : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
    

    变成这个

    public class FooHandler : BasePageClass, IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
    

    我收到以下警告,这使我重新考虑我在做什么:

    FooHandler.ProcessRequest(系统.Web.HttpContext) 隐藏继承的成员 系统.Web.UI.Page.ProcessRequest页(系统.Web.HttpContext). 要重写该实现,请添加 override关键字。否则添加 新关键字。

    2 回复  |  直到 16 年前
        1
  •  3
  •   solomonbicakcic    12 年前

    如果将父类ProcessRequest设置为virtual,则可以在子类中重写它,并从重写的方法内部调用基类方法。

    public abstract class ParentHandler : IHttpHandler, IRequiresSessionState
    {
        protected WebConnectHandler Context;
    
        public virtual void ProcessRequest(HttpContext context)
        {
            Context = new WebConnectHandler(context);
        }
    
        //...
    }
    
    //...
    public class ChildHandler : ParentHandler
    {
        public override void ProcessRequest(HttpContext context)
        {
            base.ProcessRequest(context);
            //the rest of your code
        }
    }
    //...
    
        2
  •  1
  •   Wyatt Barnett    16 年前

    现在您将发现为什么OO大师类型总是投票支持组合而不是继承。不管怎样,做你想做的事是很棘手的系统.Web.UI.Page实现了IHttpHandler(如果我没记错的话)有很多内部处理,要返回到自己的处理程序是不可能失败的。

    最简单的解决方法是尝试将这些函数中的许多从monster基页类移到它们自己的类中,或者更好的方法是将IHttpModules移到处理诸如会话到期之类的事情有意义的地方,以便分离这些事情。

    推荐文章