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 :

Alternative à une interface pour des membres "static"


Sujet :

C#

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Points : 709
    Points
    709
    Par défaut Alternative à une interface pour des membres "static"
    Bonjour,

    je travaille actuellement sur un outil d'administration d'une application existante (développée dans une solution "isolée" de la solution de l'application), que je ne suis pas censé modifier (la modification impliquerait trop de changements).

    Pour y accéder depuis l'application d'administration, j'ai jusqu'ici utilisé des interfaces. Mais dans le cas présent, j'ai besoin d'une classe dont tous les membres sont static.

    Avez-vous des pistes pour ce genre de problème ? (je n'en demande pas plus : avec les informations que je fournis, je n'espère pas avoir LA solution)

    Merci d'avance !

    Alban

  2. #2
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Pas possible. Une fonction statique ne peut de toutes façons être appelée que par NomDeLaClasse.Methode, et donc "interface" et "statique" sont des concepts qui vont pas ensemble.

    Après, je connais pas tes contraintes, mais un pattern singleton ne ferait pas ton affaire ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Points : 709
    Points
    709
    Par défaut
    Après une petite recherche, si je comprends bien, un pattern singleton est une classe qui ne peut s'instancier qu'une seule fois ?

    Si on avait affaire à la même solution, ça aurait été une bonne solution, mais là, l'outil d'administration est "indépendant" (on importe les DLL générées par l'application en tant que références dans l'application d'admin).

    Et pour ce qui est de la classe à "interfacer", je n'ai pas la possibilité de la refaire totalement.

    Ceci dit, la solution n'a pas l'air triviale. Je pensais que c'était un problème bête que je ne savais pas résoudre par "incompétence" (je suis stagiaire, donc je ne sais rien faire ), mais entre temps, des collègues plus confirmés s'y sont penchés... et sèchent.

    Je pense qu'il y a besoin du code pour s'en sortir... et je ne peux pas le poster ici (problèmes de confidentialité).

    Si quelqu'un a une bonne idée, je reste preneur. Sinon, j'essaierai de poster une idée de la solution ici si je la trouve

    En tout cas, merci !

  4. #4
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par alband85 Voir le message
    Après une petite recherche, si je comprends bien, un pattern singleton est une classe qui ne peut s'instancier qu'une seule fois ?
    Yep. Simplifié à l'extrême, ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class A
    {
    public static readonly A Instance = new A();
    private A() { }
    }
    C'est le design pattern de base, celui que les recruteurs adorent

    Mais tu donnes peu de détails sur ton souci. Pas besoin de poster de code, mais quelles sont les caractéristiques des classe que tu importes qui ne te satisfont pas ? Pourquoi te faudrait-il une classe statique ? Tu parles d'interfaces ; d'où elle viennent ? Qui les implémente ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Points : 709
    Points
    709
    Par défaut
    Pour résumer, j'ai deux solutions (chacun ayant environ une 50aine de projets).
    On appellera la première S, et l'autre est l'ensemble de sus outils d'administration (on l'appellera S_Admin).

    Dans S, on a un certains nombre de choses qui ne dépendent que de la version de l'application (celle-ci est déployée sur divers environnements dans des versions différentes).
    S_Admin doit pouvoir administrer toutes les versions de cette application.

    Du coup, on a des interfaces qui relient S et S_Admin sans dépendre de S (aucune référence notamment aux DLL de S).

    Dans le cas présent, on avait des membres static d'une classe de S qui m'intéressaient dans S_Admin.

    Et au final, la solution n'était pas si compliquée... une interface allait bien, il fallait juste utiliser des accesseurs non static...

    Exemple :
    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
    16
    17
    18
    19
     // Propriété privée
    private static string m_MonNom;
    // Accesseur static
    public static string MonNom 
    {
      get
      {
        return m_MonNom;
      }
      set
      {
        m_MonNom = value ;
      }
    }
    // Méthode utilisée uniquement dans l'interface
    public void SetMonNom(string nom)
    {
      m_MonNom = nom;
    }
    Si ça t'intéresse, je veux bien essayer de détailler un peu s'il y a des points obscurs.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD17] poo : comportement des membres globaux (static) d'une classe
    Par lmontout dans le forum WinDev
    Réponses: 5
    Dernier message: 26/12/2012, 12h21
  2. Piloter une interface avec des relais
    Par Yepazix dans le forum API, COM et SDKs
    Réponses: 13
    Dernier message: 26/10/2004, 19h46
  3. Comment créé une "interface" pour mes programmes??
    Par alcazar dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 09/02/2004, 13h02

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