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

Windows Forms Discussion :

Quand soit on utiliser une strcture au lieu d'une classe


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de wodel
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Par défaut Quand soit on utiliser une strcture au lieu d'une classe
    Salut,

    je vient de lire un petit code en C# qui utilise une structure (struct), que j'ai jamais utilisé en C# pour le moment , et j'ai vu qu une structure pouvait avoit un constructeur et des méthodes...
    comme une class, alors elle se trouve ou l'utilité d'utiliser une structure au lieu d'une class???



    merci

  2. #2
    Membre confirmé
    Profil pro
    Ingénieur de développement
    Inscrit en
    Avril 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur de développement

    Informations forums :
    Inscription : Avril 2005
    Messages : 169
    Par défaut
    La sérialization (par exemple), plus adaptée quand on les utilise comme paramètre de fonctions, ...

  3. #3
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Salut .

    Une structure est passé par copie alors qu'une classe est passé par référence.

    Contretement ça donne quoi ? imaginons le code suivant :

    Code c# : 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
     
     
    struct S
    {
       private int[] nombre;
     
       public S()
       {
          nombre = new int[100];
       }
    }
     
     
    public void UneMethode()
    {
       S s = new S();
     
       UneDeuxiemeMethode(s);
    }
     
    public void UneDeuxiemeMethode(S s2)
    {
       ///
    }

    bon ben si tu fait un modification du parametre s2 dans la fonction cette modification ne sera pas répercuté dans s. s a été copié totalement dans s2.

    Une autre conséquence de cela est l'augmentation de la mémoire prise. En effet toujours avec le code précédent tu n'as pas 1 tableau de 100 élément int mais deux ... Dans ce cas simple c'est pas grave mais si tu passes 1000 fois ta structure en argument tu auras 1000 tableau de 100 éléments ...

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Si l'explication de dev01 est globalement correcte, il me semble qd même que les tableaux en .Net sont des types références et donc que qd la structure S est copiée seule est copiée la référence vers le membre "nombre" et pas le tableau tout entier.

    Autre précision, si effectivement la consommation mémoire augmente avec l'utilisation de struct à cause des copies, les allocations / déallocations se font plus rapidement car sur la pile. Pas d'intervention du garbage collector.

  5. #5
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Les types valeurs dont les structures sont alloués sur la pile.
    On utilisera donc une structure quand cette dernière contiendra un minmum de champs de type valeur aussi... sinon une classe.

  6. #6
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Citation Envoyé par Sphax
    Si l'explication de dev01 est globalement correcte, il me semble qd même que les tableaux en .Net sont des types références et donc que qd la structure S est copiée seule est copiée la référence vers le membre "nombre" et pas le tableau tout entier.
    Effectivement les tableau étant mappé sur la classe Array ils sont transmi pas référence, autant pour mon exemple foireux ....

    Sinon pour ce qui est de la vitesse d'allocution/deallocution, vu les temps des autres opérations qui sont effectué régulièrement, je pense que l'on peux ne pas en tenir compte

Discussions similaires

  1. [2008 R2] Utilisation de TOP au lieu d'une CTE
    Par Kropernic dans le forum Développement
    Réponses: 7
    Dernier message: 09/01/2013, 17h40
  2. Utilisation d'une structure au lieu d'une classe
    Par LinuxUser dans le forum C++
    Réponses: 10
    Dernier message: 23/11/2012, 13h03
  3. Ouvrir une fiche au lieu d'une autre
    Par AmisNoob dans le forum Débuter
    Réponses: 2
    Dernier message: 22/10/2009, 21h58
  4. [PHP-JS] Afficher une image au lieu d'une page PHP
    Par Space Cowboy dans le forum Langage
    Réponses: 6
    Dernier message: 11/01/2007, 15h54
  5. Réponses: 3
    Dernier message: 03/05/2006, 15h08

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