接口如何实现功能?

时间:2009-08-04 12:17:10

标签: c# asp.net

在ASP.net中的通用处理程序文件(.ashx) 默认情况下未启用会话,无论如何,会话集合都为空。

但是通过简单地实现“ISessionHandler”,会话可以通过会话集合突然访问..

我真的不明白,因为我的头部界面除了告诉其他东西需要有什么方法,属性等之外什么都不做。

有谁知道这是如何运作的?

提前致谢:)

5 个答案:

答案 0 :(得分:5)

这些界面我相信叫做Marker Interfaces,它们是“Mark”的一个目的。通过反射(即检查类是否实现接口)或通过chken,如果类x是IInterface类型,您可以启用某些功能。

编辑:以下是关于这个主题的更多信息(关于Java,但相关)

link text

答案 1 :(得分:3)

接口实际上没有实现任何东西;他们可能只是检查类型并根据它采取不同的行动。

例如:

public ISession Session
{
    get { if (this is ISessionHandler) return theSession; else return null; }
}

答案 2 :(得分:1)

这些接口仅由HttpContext使用。如果您查看反射器中Handler属性,您将看到以下内容:

 set
    {
        this._handler = value;
        this.RequiresSessionState = false;
        this.ReadOnlySessionState = false;
        this.InAspCompatMode = false;
        if (this._handler != null)
        {
            if (this._handler is IRequiresSessionState)
            {
                this.RequiresSessionState = true;
            }
            if (this._handler is IReadOnlySessionState)
            {
                this.ReadOnlySessionState = true;
            }
            Page page = this._handler as Page;
            if ((page != null) && page.IsInAspCompatMode)
            {
                this.InAspCompatMode = true;
            }
        }
    }

密钥位为:

    if (this._handler is IReadOnlySessionState)
    {
        this.ReadOnlySessionState = true;
    }

正如其他人所说,它们是HttpContext使用的标记接口,用于确定它应具备的功能。

IHttpHandler的ProcessRequest接受一个HttpContext,因此两者之间的关系。

答案 3 :(得分:0)

来自IRequiresSessionState界面的文档:

  

指定目标HTTP处理程序   需要读写访问权限   会话状态值。这是一个标记   界面,没有方法。

答案 4 :(得分:0)

有人说Marker接口已被弃用,而且应该使用Attributes,但我想知道为什么......使用Marker接口也更安全,更优雅的语义,并且肯定比搜索属性更高效。< / p>