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 :

declaration comparer dans classe statique


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut declaration comparer dans classe statique
    Je suis perdu !
    Je viens de rassembler dans une classe statique, une liste, sa structure est deux comparer
    Avant tout etait dans ma form et ca marchait tres bien

    Mais maintenant je ne parviens plus a declarer et instancier correctement mes comparer quelqu'un peut il 'aider !

    En bas du code en commentaire l'instanciation de mes comparer tel que c'etait avant


    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    using System;
    using System.Collections.Generic;
    using System.Text;
     
    namespace Recutex
    {
      static public class ListAddr
      {
        public struct S_Addr
        {
          public int AddrId;
          public int X;       // X ecran
          public int Y;       // Y ecran
          public int WGSX;
          public int WGSY;
          public int order;
          public int ordern;
          public bool active;
        };
     
        static public List<S_Addr> AddrLst = new List<S_Addr>();
     
        public class S_AddrIdComparer : IComparer<S_Addr>
        {
          public int Compare(S_Addr a, S_Addr b)
          {
            return a.AddrId - b.AddrId;
          }
        };
        public class S_AddrActiveOrderComparer : IComparer<S_Addr>
        {
          public int Compare(S_Addr a, S_Addr b)
          {
            int dif;
            if (a.active == b.active)
            {
              if (a.active == false)
              {
                return 999;
              }
              dif = (a.order - b.order);
              return dif;
            }
            if (a.active == true) return -1;
            return 0;
          }
        };
     
    //    S_AddrIdComparer compareId = new S_AddrIdComparer();
     //   S_AddrActiveOrderComparer compareActiveOrder = new S_AddrActiveOrderComparer();
      }
    }

  2. #2
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Bonsoir,

    C'est pas plutôt ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ListAddr.S_AddrIdComparer compareId = new ListAddr.S_AddrIdComparer();
     
    ListAddr.S_AddrActiveOrderComparer compareActiveOrder = new ListAddr.S_AddrActiveOrderComparer();

  3. #3
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Pas vraiment
    Ce serait ca s'il fallait instancier ces comparer en dehors de la classe

    Mais conceptuellement la classe etant statique et les comparer etant intégralement lié a la classe et ses membre il n'y a aucune raison de les instancier ailleurs (ce serait contraire a l'idée de declarer cette classe statique)

    Cela etant je ne parviens toujours pas a declarer correctement ces comparer

    Et j'espere ne pas devoir les instancier exterieurement, ce serait idiot !

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Je n'en suis pas certain, mais je me demande s'il n'y aurait pas une contrainte comme quoi les classes déclarées dans une classe statique doivent aussi être statiques...
    Tu as une erreur à la compilation ou à l'exécution ? et quelle est l'erreur ?

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Surtout : pourquoi as-tu fait une classe statique ? Si tu veux une liste de ta struct avec un comportement particulier, il vaudrait mieux faire ceci :
    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
    public struct Addr
    {
    ...
    }
     
    public class ListdeAddr : List<Addr>
    {
      // tes comparers, privés
      public SortByMachin()
      {
         // trier this en utlisant ton comparateur machin
      }
      public SortByBidule()
      {
         // trier this en utlisant ton comparateur bidule
      }
    }
     
    //ailleurs dans le code :
    ListdeAddr maliste = new ListdeAddr();
    maliste.Add(desTasDeTrucs);
    maliste.SortByMachin();

  6. #6
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut A la compilation
    Erreur de compilation

    Si je retire mes comentaire
    Can not declare instance member in a static class
    Je comprends et c'est +/- normal
    Le tout c'est de trouver COMMENT declarer ce comparer pour pouvoir l'exploiter a l'execution ?

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ah ok... c'est simplement parce que X et Y ne sont pas déclarés statiques à mon avis. Ce code devrait marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    static S_AddrIdComparer compareId = new S_AddrIdComparer();
    static S_AddrActiveOrderComparer compareActiveOrder = new S_AddrActiveOrderComparer();
    Sinon, Guulh a raison je pense, une classe statique n'est pas la bonne solution ici. Il me semble que la classe S_Addr est susceptible d'être manipulée hors d'une liste, donc ça n'a pas vraiment de sens de la déclarer dans une autre classe. Et avec ta conception tu ne peux avoir qu'une seule liste d'adresses...

  8. #8
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Statique
    Je l'ai declarée statique car c'et une base de travail pour plusieurs form et plusieurs autre classe et plusieurs procedure

    Donc asser casse bonbon de la passer partout en parametre, dans les constructeur etc

    C'est peut etre pas tres orthodoxe mais dans le cas present c'est BEAUCOUP plus confortable et lisible de l'avoir statique

    N.B: dans un premier temps, j'avais opté pour ce que tu propose pour finir par decider d'essayer de mettre statique

    C'est quand meme pas impossible de déclarer une methode dans une classe statique !!??

Discussions similaires

  1. erreur dans la declaration d'une classe
    Par lylya dans le forum Débuter
    Réponses: 9
    Dernier message: 13/04/2010, 15h09
  2. Réponses: 2
    Dernier message: 06/03/2009, 09h52
  3. Réponses: 2
    Dernier message: 17/04/2008, 18h23
  4. Tableau de constantes dans une classe statique
    Par Nico_stras dans le forum C#
    Réponses: 4
    Dernier message: 05/03/2007, 20h18
  5. [VB.NET] Declaration problématique dans une classe
    Par joefou dans le forum VB.NET
    Réponses: 8
    Dernier message: 01/03/2006, 11h38

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