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 :

créer un objet en utilisant un initialiseur


Sujet :

C#

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    958
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 958
    Points : 141
    Points
    141
    Par défaut créer un objet en utilisant un initialiseur
    Bonjour,

    Concernant l'usage d'un initialiseur, il est ecrit que l'initialisation d'un champ par ce biais efface une éventuelle initialisation de ce même champ qui aurait été effectuée par le biais d'un constructeur.

    Dans ce cas, pourquoi "effacer " l'initialisation du constructeur , ou initialiser un champ par le biais d'un initialiseur alors qu'elle est déjà effectuée, pour ce champ, dans un constructeur?
    Quand cela peut être utile?

    Merci beaucoup de votre aide sur ce point.
    Cordialement.

    new_wave

    Voici un 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Test_Revisions_C_sharp
    {
        public enum ResidenceType { House, Flat, Bungalow, Apartment };
        class Residence
        {
            public ResidenceType type;
            public int numberOfBedrooms;
            public bool hasGarage;
            public bool hasGarden;
     
            public Residence(ResidenceType type, int numberOfBedrooms)
            {
                this.type = type;
                this.numberOfBedrooms = numberOfBedrooms;
     
            }//fin de 1er constructeur
            public Residence(ResidenceType type, int numberOfBedrooms, bool hasGarage)
            {
                this.type = type;
                this.hasGarage = hasGarage;
                this.numberOfBedrooms = numberOfBedrooms;
     
            }//fin de 2ème constructeur
     
        }//fin de classe
     
    }//fin de namespace
    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
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using System.IO;
     
     
     
    namespace Test_Revisions_C_sharp
    {
        /// <summary>
        /// Logique d'interaction pour MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
     
     
    private void test_initialiseur_Click(object sender, RoutedEventArgs e)
            {
     
                Residence myHouse = new Residence(ResidenceType.House, 3) { numberOfBedrooms = 4 };
     
     
     
            }//fin de méthode test_initialiseur
     
     
     
     
        }//fin de classe
    }//fin de namespa
    On remarque bien au niveau de la fenêtre des varaibles locales, que la variable numberOfBedrooms = 4 alors qu'elle est initialisée à 3 dans le constructeur.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  2. #2
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Bonjour.

    Le but de cette fonctionnalité est de faire des économies de code. Typiquement tu définis seulement un constructeur standard, et tu utilises ensuite les intialiseurs pour créer de légères variations.

    Un bon exemple c'est un jeu d'options. Tu fournis un seul constructeur avec les valeurs par défaut typiquement désirées et le consommateur peut ensuite choisir de changer tel ou tel champ. Tu n'as pas besoin de créer tous les constructeurs possibles et imaginable, ce qui pourrait vite devenir lourd. D'autant que tu aurais des conflits : tu ne peux pas avoir deux constructeurs acceptant les mêmes types.

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,
    Merci DonQuiche
    On peut donc attribuer une valeur à hasGarden ainsi puisque le constructeur avec cette propriété n'existe pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                Residence myHouse = new Residence(ResidenceType.House, 3) { hasGarden= true };
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    958
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 958
    Points : 141
    Points
    141
    Par défaut
    Bonjour,

    Je considère ce message comme résolu.

    Cordialement.

    new_wave
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

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

Discussions similaires

  1. [Débutant] Comment créer un objet utilisable partout
    Par damdev dans le forum C#
    Réponses: 6
    Dernier message: 04/01/2012, 22h46
  2. utiliser hashcode pour créer un objet
    Par lightedge dans le forum Général Java
    Réponses: 13
    Dernier message: 19/03/2010, 12h21
  3. Réponses: 10
    Dernier message: 27/08/2008, 12h06
  4. [][Timer] Créer un Timer sans utiliser le composant
    Par HPJ dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 01/10/2003, 11h04
  5. Créer des objets sur la pile ?
    Par Cornell dans le forum Langage
    Réponses: 8
    Dernier message: 03/03/2003, 11h47

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