2009-12-14 3 views
0

Jamais vu cela fait dans asp.net, mais jamais moins, puis-je définir des fonctions sans faire partie de la classe?Fonctions autonomes dans ASP.net

Ce que je voudrais avoir est une bibliothèque utilitaire. Actuellement, j'ai une classe Utils et chaque fois que je dois l'utiliser pour des choses comme peupler des listes déroulantes, je dois créer et initer l'objet Utils() ... en plus de la classe statique que je préférerais ne pas faire comme j'accède à la session dedans? J'utilise C#, et non VB.

Merci

+0

Découvrez la réponse de Kevin. Si vous pouvez définir et utiliser des méthodes d'extension sur la classe Page (ou dans 2.0 utiliser systématiquement votre propre classe de base au lieu de Page) cela donnera la syntaxe de code que vous recherchez. Les contrôles ou les services Web nécessiteraient un peu de travail supplémentaire. –

+0

Je crée en fait 2 classes statiques de type Util: Util pour les données utilisées uniquement par le projet local, et SharedUtil (ou similaire) pour la bibliothèque commune partagée - ceci évite les erreurs d'ambiguïté. Je place également la bibliothèque partagée dans un référentiel source séparé pour mieux gérer les versions. – devstuff

+0

BTW, l'Util local est normalement marqué comme 'internal' et le SharedUtil est' public'. – devstuff

Répondre

5

Il n'existe aucun moyen d'avoir des méthodes en dehors des classes.

La solution typique dans votre cas est de créer une classe utilitaire pleine de méthodes statiques ... de cette façon vous n'avez pas à vous soucier de créer une instance de la classe pour utiliser ses méthodes. Comme Joel mentionné ... vous pouvez toujours accéder à la session à partir d'une méthode statique.

+0

+1. Pas besoin d'instancier une classe utils, il suffit d'aller avec la statique. – jvenema

+0

VB peut avoir des modules.Ceux-ci se compilent dans une classe par défaut avec un constructeur privé et les méthodes deviennent partagées. Alors que le MSIL est toujours une classe, le code ressemble à une méthode sans classe contenant. –

3

Vous pouvez toujours utiliser les méthodes d'extension.

http://msdn.microsoft.com/en-us/library/bb383977.aspx

Vous pouvez ensuite ajouter les méthodes sur les objets existants.

Vous pouvez également créer une classe de base dont toutes vos pages héritent et qui contiennent les méthodes dont vous avez besoin. Il fait toujours partie d'une classe, mais vous n'avez pas besoin d'instancier un nouveau ni d'utiliser des méthodes statiques.

+0

... même les méthodes d'extension appartiennent à une classe. –

+0

oh absolument. Vous ne pouvez pas avoir des cours, mais j'essayais d'offrir une alternative au problème qu'il avait. – kemiller2002

0

Si la classe est à l'état, laissez-la tranquille. Sinon, prenez votre état en tant que paramètres et ensuite le rendre statique.

1

Vous pourriez avoir tout ce que vous les pages proviennent d'une classe BasePage et de mettre toutes vos méthodes de util (ou les emballages pour eux) dans la classe de page de base

+0

Je le fais aussi, mais cela signifie que vous devez avoir une duplication de code. C'est à dire. PageBase qui hérite de System.Web.UI.Page et ControlBase qui hérite de System.Web.UI.UserControl. Tout le reste va dans une classe statique Utils. – Junto

0

Vous pouvez accéder aux variables de session à l'aide HttpContext.Current.Session [ ], et vous pouvez le faire à partir de n'importe quelle classe (En fait, dans de nombreuses applications où j'ai utilisé des variables de Session, j'encapsule toutes mes variables de session dans leur propre classe). Cela dit, il n'y a aucun moyen d'avoir une méthode en dehors d'une classe, et il n'y a vraiment pas de bonne raison de le faire.

2

Vous pouvez toujours accéder aux variables de session dans une classe statique. Une façon pourrait être comme ceci:

public static class Utils 
{ 
    private static HttpSessionState Session 
    { 
     get { return HttpContext.Current.Session; } 
    } 

    public static string DoThing(string input) 
    { 
     // here you can access session variables like you're used to: 
     Session["foo"] = input; 
    } 
} 
+0

ne peut pas simplement accéder à HttpContext.Current.Session n'importe où sans passer des références? semble malpropre – sarsnake

+0

Oui, vous pouvez accéder 'HttpContext.Current.Session' n'importe où. J'ai juste jeté dans la propriété statique comme un exemple de la façon dont vous pouvez éviter de modifier le code existant, ou d'écrire "HttpContext.Current.Session" plusieurs fois - c'est ce qui me semble malpropre. –

+0

En fait, j'ai complètement oublié que j'ai déjà encapsulé tous les accès à la session dans une classe appelée httphelper, qui est statique. Je l'ai fait un moment en arrière et ça m'a complètement échappé. Donc maintenant, chaque fois que j'ai besoin d'accéder à la session tout ce que j'ai à faire est HttpHelper.Session (clé). Je suppose que mon problème s'est éliminé. Merci! – sarsnake

Questions connexes