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# : Partial Class (classes partilelles) entre des fichiers de projets différents d'une solution VS ?


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Points : 120
    Points
    120
    Par défaut C# : Partial Class (classes partilelles) entre des fichiers de projets différents d'une solution VS ?
    [ Est-il possible d'utiliser des classes partielles pour créer des méthodes spécifiques sur ces classes entres différents projet à l'intérieur d'une solution Visual Studio ? ]

    Bonjour à tous,

    Je développe actuellement un jeu d’échec en c# qui va utiliser une interface dans le terminal pour débuter, puis une interface Silverlight par la suite.

    Pour prendre de bonnes habitudes, dans ma solution Visual Studio je sépare le code en couche (objet et affichage) en créant :

    • un premier projet qui contient les bibliothèques des objets (Pieces, Roi, Dame… Joueur, JoueurBlanc… Échiquier)
    • un second projet destiné à l’affichage, qui importe ces bibliothèques et implémente les objets (et affiche l’échiquier dans un terminal en appelant la Méthode « afficher() » de l’objet échiquier ).




    Ainsi ma méthode « afficher() », est implémentée dans mon premier projet pour l’instant.

    Cela peut aller tant que je n’implémente pas le troisième projet qui lui va également importer les bibliothèques et vouloir afficher l’échiquier, mais pas de la même manière puisque ça sera une interface en Silverlight.

    Il faudrait donc migrer les méthodes d’affichages existantes en mode terminal (Console.Write) dans le second projet. Et là se pose le problème : comment faire ?

    • 1ère solution, dans le second projet destiné l’affichage dans le terminal, créer des classes qui hérite de mes classes du premier projet (Pièces, Roi… Echiquier) et faire de même pour le troisième avec un affichage spécial silverlight. Le problème, c’est que :
      - c’est « long » à faire
      - que je vais devoir le refaire pour chaque classe
      - qu’il va falloir que je recode les constructeurs
      - et surtout que je trouve de nouveaux noms pour mes classes héritées… Je ne me voix pas instancier des objets d’un nom « EchiquierHerité e = new EchiquierHérité(); ».
    • 2éme solution éventuelle, les classes partielles.
      Avec les classes partielles, il est possible de diviser en plusieurs fichiers une classe. Je me suis dit super ! Toute mes classes vont être partielle et :
      - dans le projet n°2 (Terminal) : j’implémenterai les méthodes « affichage() » version terminal.
      - dans le projet n°3 (Silverlight) : j’implémenterai les méthodes « affichage() » version silverlight.

      Trop beau pour être vrai , je n’ai pas de sources certifiant cela mais : je pense que les classes partielles ne marche que si les fichiers sont dans le même projet … ce qui serait normal, si l’on réfléchit à la manière dont sont compilé les projets des solutions Visual Studio.

      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
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
       
      FICHIER PROJET 1
       
      public partial class Roi
      {
          public Echiquier()
          {
              //Constructeur
          }
      }
       
      FICHIER PROJET 2 
       
      public partial class Roi
      {
          public void afficher()
          {
               Console.Write(); 
               // ......
          }
      }
       
      FICHIER PROJET 3
       
      public partial class Roi
      {
          public void afficher()
          {
               DessinerEnSilverlight();
               // ......
          }
      }




    Est-ce que cela ne marche pas parce que je m'y prend mal ? Ou est-ce qu'il est réellement impossible de développer des "Partial Class" sur différents projets à l'intérieur d'une solution Visual Studio 2008 ?

    Sur ce, avez vous rencontré ce type de problème ? Avez vous d'autres solutions ?

    Merci d'avance pour vos réponses !

  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
    Citation Envoyé par nicopulse Voir le message
    Est-il possible d'utiliser des classes partielles pour créer des méthodes spécifiques sur ces classes entres différents projet à l'intérieur d'une solution Visual Studio ?
    Non. Les classes partielles ne sont pas un concept de POO, elles servent juste à isoler le code généré du vrai code.

    Dans ton cas, la bonne grosse solution standard, avec un AbstractBidule dans ton assembly commune, un TerminalBidule et un SilverlightBidule dans tes deux projets.

    Après, si ces deux classes filles ne font qu'implémenter la classe de base sans rajouter de méthode, tu n'as jamais besoin de manipuler les classes filles directement, et tu peux utiliser le design pattern abstract factory pour instancier le bon type.

    Dans le projet partagé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    abstract class AbstractFactory
    {
      abstract AbstractBidule GetBidule();
    }
    Dans le projet Terminal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class TerminalFactory : AbstractFactory
    {
       AbstractBidule GetBidule() { return new TerminalBidule(); }
    }
    Dans le projet Silverlight :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class TerminalFactory : AbstractFactory
    {
       AbstractBidule GetBidule() { return new SilverlightBidule(); }
    }
    ಠ_ಠ

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Points : 120
    Points
    120
    Par défaut
    Je te remercie pour ta réponse et ces précisions.

    Dans un soucis de temps, je pense que je vais d'abord me concentrer sur quelque chose d'un peu plus brut car si je suis un peu plus à l'aise avec la théorie sur le développement n-couches, ses avantages, etc...

    J'ai du mal a maitriser la technique avec Visual Studio et C#, j'ai trouvé quelques exemples en cherchant sur Google, mais rien de très "appropriable".

    Je ne comprend pas non plus l'intérêt des "helpers". Au niveau technique ça reste flou.

    Si tu as des exemples de solutions Visual Studio "simple ou bien commenté" sous la main, je suis preneur.

  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
    En tous cas, C# n'a rien de spécifique, pour ce qui est de la séparation en couches. Les mêmes recettes qu'en Java, C++ et autres s'appliquent tout pareil.
    ಠ_ಠ

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/06/2013, 17h46
  2. [Batch] Appel de variables entre des fichiers BATCH
    Par boguista1985 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 17/05/2011, 14h50
  3. a2ps avec en entrée des fichiers PostScript
    Par patmar dans le forum Autres Logiciels
    Réponses: 0
    Dernier message: 18/04/2011, 09h40
  4. transfert d'information entre des fichiers
    Par Amallric dans le forum Langage
    Réponses: 10
    Dernier message: 21/09/2006, 08h50
  5. Pour retirer des fichiers du projet courant
    Par Le Furet dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 31/01/2006, 19h43

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