IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#] Probléme avec Méthode Static


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2008
    Messages : 3
    Par défaut [C#] Probléme avec Méthode Static
    Bonjour à tous, voilà je bute sur ce problème et je n'arrive pas à comprendre le pourquoi (certainement dû à un manque de connaissance).

    La situation :

    - Un site ASP.NET lié à une DLL.

    Le probléme :

    J'ai une classe User dans ma DLL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    public class User {
     
    public User() {...}
     
    public User GetbyID(int myUid){...}
     
    public bool Create(){...}
     
    virtual public bool Update(){...}
     
    virtual public bool Delete(){...}
     
    public static List<User> GetAllUser(){...}
    }
    Je veux que la commande GetAllUser() soit static pour ne pas devoir instancier un objet User. Cela ne me paraît pas logique d'instancier un objet User alors que je veux une liste de User.

    Lorsque je vais dans une autre classe de ma dll, par exemple Session et que je fais User.GetAllUser(); pas de probléme.

    Par contre lorsque je suis dans mon page load de mon default.aspx. J'ai bien mis le using madll.data;

    Je veux réappeler ma méthode statique et la rien... Impossible de refaire un User.GetAllUser();

    La seule solution que j'ai est de rendre la méthode publique et ensuite faire un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var user = new User();
    var y = user.GetAllUser();
    Pourquoi dans ma dll, cela marche et que dans le site ASP cela ne fonctionne pas ? J'ai bien ajouté ma référence au site, j'ai fait un rebuild de ma dll. Rien n'y fait ?

    QQun a-t'il une solution ou une piste ?

    Merci d'avance à vous tous...

  2. #2
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Bonjour,

    J'ai jamais rencontre ce pb...par contre, le cas de ton appel dans la page asp me semble absolument normal, vu que ta classe User n'est pas definie comme statique...

    Si tu veux pouvoir appeler User.GetAllUser() comme ca, User devrait etre statique. Personnelement, je bougerais ton GetallUsers dans une classe UsersFactory, comme ca, tu as une factory statique, qui instatie tes classes normales

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2008
    Messages : 3
    Par défaut
    Merci de ta réponse.

    Mais il me semble que l'on déconseille de créer des class rien que pour ce genre d'appel.

    D'aprés C# 3.0 O'Reilly

    Je cite :

    Resist the temptation to create a single class in your program in which you stash all your miscellaneous methods. It is possible, but not desirablem and it undermines the encapsulation of an oject-oriented design.

    La solution de créer une classe statique UserFactory avec mes méthodes statiques n'est pas contre ce qui est écrit ci-dessous ?

    De plus je pensais que c'était l'une des utilisations dans laquelle on devait rendre une méthode statique malgré que la classe ne le soit pas.

    De plus pourquoi lorsque je suis au niveau de la DLL, le User.GetAll fonctionne et lorsque je suis au niveau de mon site ASP, cela ne fonctionne plus.

    C'est surtout cette partie qui m'échappe totalement....

    De plus, si je vais dans ton sens, je vais avoir une Factory pour chacune de mes classes (Projects, Sessions, Page,...). Il est vrai que le GetAll ne sert que dans quelques cas mais j'aimerais avoir une explication sur ce comportement car qqchose m'échappe et ça ne me plaît pas...

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2008
    Messages : 3
    Par défaut
    J'ai trouvé pourquoi

    En fait dans using System.web, il y a déjà un objet User.
    Ce qui fait qu'il prenait l'objet du framework et non pas l'objet de la dll.

    En nommant ma classe User2, j'ai maintenant accès à ma méthode statique.

    Je ne sais pas si c'est vraiment le bon fonctionnement d'utiliser une méthode statique à cette endroit mais cela simplifie mon code...

    Des idées sur quel est la meilleur solution

  5. #5
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    re.

    En fait dans using System.web, il y a déjà un objet User.

    Tiens, oui, c'est vrai, j'y avais pas pensé...meuh

    Resist the temptation to create a single class in your program in which you stash all your miscellaneous methods. It is possible, but not desirablem and it undermines the encapsulation of an oject-oriented design.

    La solution de créer une classe statique UserFactory avec mes méthodes statiques n'est pas contre ce qui est écrit ci-dessous ?
    Non, l'idée, c'est que, pour l'instant, tu as une classe user avec n attributs representant ton utilisateur.

    Pour l'instant, tu veux ajouter une methode, qui va rapatrier tes n utilisateurs. D'ici peu, tu vas ajouter un GetOneUser(id), GetOneUserByFirstName, probablement un update, un insert et un delete, et quelques autres fonctions annexes.

    Ces fonctions, je les vois bien dans une autre classe-> factory, ce qui te permets de separer les responsabilites de tes objets.

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

Discussions similaires

  1. Problème avec méthode UpdateCommand
    Par Nixar dans le forum C#
    Réponses: 1
    Dernier message: 22/07/2008, 22h54
  2. Problème avec méthode unload
    Par label55 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 21/05/2008, 10h45
  3. Problème avec méthode AddFromString
    Par Farbin dans le forum VBA Access
    Réponses: 7
    Dernier message: 04/02/2008, 18h21
  4. Problème avec méthode "cloneNode()"
    Par kingmandrax dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 31/10/2006, 14h14
  5. Réponses: 6
    Dernier message: 27/07/2005, 09h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo