扩展基类

时间:2010-03-05 11:11:00

标签: c# asp.net vb.net inheritance extension-methods

在ASP.net中创建网页时,代码库继承System.Web.UI.Page

现在,当我扩展页面对象以检查SessionExpired时,我创建了一个新类并从system.web.ui.page继承,并覆盖了一些函数。

问题是在每个页面上,我必须用我的custompage类替换system.web.ui.page。

有没有办法通过添加方法或直接修改方法来扩展类(例如将sessionExpired check添加到System.Web.UI.Page)?

我正在使用.NET 2.0

2 个答案:

答案 0 :(得分:2)

您可以为System.Web.UI.Page类添加扩展方法,以便为您检查会话到期时间。我认为这样的事情会起作用。

public static bool CheckSessionExpired(this System.Web.UI.Page page)
{
   ///...check session expiry here...///
}

扩展方法是C#3.0的特性,因此您必须安装C#3.0编译器来编译代码(VS.NET 2008或更高版本)

在使用.NET 2.0时,您必须创建一个属性,因为扩展方法依赖于仅属于.NET 3.5(System.Core.dll)的属性。只需在项目中创建以下属性,您就可以使用扩展方法:

using System;

namespace System.Runtime.CompilerServices
{
    public class ExtensionAttribute : Attribute { }
}

答案 1 :(得分:1)

VB 2008支持扩展方法,但是:扩展方法不能覆盖基类方法,只能添加新方法。他们无法直接访问扩展类型的成员。扩展不是继承。因此,您可以通过扩展方法添加sessionExpired检查并在需要时调用它,但您不能使用它来向System.Web.UI.Page的行为添加任何触发机制。