Расширение базового класса - PullRequest
1 голос
/ 05 марта 2010

Когда вы создаете веб-страницу в ASP.net, кодовая база наследует System.Web.UI.Page

Теперь, когда я расширяю объект страницы для проверки, например, SessionExpired, я создаю новый класс и наследую от system.web.ui.page и перезаписываю некоторые функции.

Проблема в том, что на каждой странице я должен заменить system.web.ui.page своим классом пользовательских страниц.

Есть ли способ расширить класс, добавив методы или изменив его методы напрямую (например, добавьте проверку sessionExpired в System.Web.UI.Page)?

Я использую .NET 2.0

Ответы [ 2 ]

2 голосов
/ 05 марта 2010

Вы можете добавить метод расширения для класса 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 голос
/ 05 марта 2010

VB 2008 поддерживает методы расширения, но: методы расширения не могут переопределять методы базового класса, только добавляют новые методы. Они не имеют прямого доступа к членам расширенного типа. Расширение не наследование. Поэтому вы можете добавить проверку sessionExpired с помощью методов расширения и вызывать ее всякий раз, когда вам нужно, но вы не можете использовать ее для добавления какого-либо механизма запуска в поведение System.Web.UI.Page.

...