扩展Generic Handler类时代码不会触发

时间:2016-02-02 16:27:29

标签: c# asp.net

我创建了一个继承自IHttpHandler

的类
public class MyGenericHandler : IHttpHandler
{
    public User user;
    public void ProcessRequest(HttpContext context)
    {
        user = Extensions.GetUser();
    }
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

现在我正在创建一个继承自上面类的Generic Handler(.ashx):

<%@ WebHandler Language="C#" Class="test" %>

using System.Linq;
using System.Web;
public class test :MyGenericHandler
{

    public void ProcessRequest(HttpContext context)
    {
        ((MyGenericHandler)this).ProcessRequest(context);
        context.Response.Write("test");
    }
}

但代码context.Response.Write("test");永远不会执行。但是第一类(context.Response.Write("test");)中的那个被触发了。

1 个答案:

答案 0 :(得分:1)

在C#中使用继承时,您需要在要覆盖的成员上使用C#关键字“virtual”和“override”。

  

virtual关键字用于修改方法,属性,索引器或事件声明,并允许在派生类中重写它。

     

override方法提供从基类继承的成员的新实现。

如果你不这样做,那么他们将改为“hidden”,而且几乎肯定不会按照你想要的方式运作。

  

当用作声明修饰符时,new关键字显式隐藏从基类继承的成员。隐藏继承的成员时,该成员的派生版本将替换基类版本。虽然您可以在不使用new修饰符的情况下隐藏成员,但会收到编译器警告。如果使用new来显式隐藏成员,则会抑制此警告。

这是一些类的示例,一组使用虚拟/覆盖,另一类没有。

https://dotnetfiddle.net/lEDkdr

请注意警告三角形,告诉您正在使用“隐藏”而不是覆盖。