C# 代码没有';扩展泛型处理程序类时触发

C# 代码没有';扩展泛型处理程序类时触发,c#,asp.net,C#,Asp.net,我创建了一个继承自IHttpHandler public class MyGenericHandler : IHttpHandler { public User user; public void ProcessRequest(HttpContext context) { user = Extensions.GetUser(); } public bool IsReusable { get {

我创建了一个继承自
IHttpHandler

public class MyGenericHandler : IHttpHandler
{
    public User user;
    public void ProcessRequest(HttpContext context)
    {
        user = Extensions.GetUser();
    }
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}
现在,我正在创建一个从上面的类继承的通用处理程序(.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");
    }
}

使用System.Linq;
使用System.Web;
公共类测试:MyGenericHandler
{
公共void ProcessRequest(HttpContext上下文)
{
((MyGenericHandler)this.ProcessRequest(上下文);
context.Response.Write(“测试”);
}
}

但是代码
context.Response.Write(“test”)从不执行。但是第一个类(
context.Response.Write(“test”);
)中的一个被触发。

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

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

重写方法提供从基类继承的成员的新实现

如果您不这样做,那么它们将改为“”,而这几乎肯定不是您想要的方式

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

下面是一些类的示例,一个使用虚拟/重写,另一个不使用


请注意警告三角形,它让您知道正在使用“隐藏”而不是重写。

ProcessRequest在基类中不应该是虚拟的,而在继承类中不应该是重写的吗@AndyJ就像你说的那样。它在继承类中被重写,那么您想编辑您的问题以显示它吗?粘贴的代码上没有virtual/override。
MyGenericHandler
是基类,
ProcessRequest
在继承自
MyGenericHandler
virtual的测试类中被重写,override是C#关键字。如果你看我的第一条评论,这里有一个指向MSDN文档的链接。我补充说,作为编辑后,我作出了最初的评论,所以道歉,如果你错过了它。这里有一个例子:注意一组类的橙色警告三角形警告“隐藏”。如果不使用virtual/override,则该方法将被隐藏而不是重写,并且隐藏几乎肯定不会按您想要的方式工作。