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 :

Assignations en orienté objet


Sujet :

C#

  1. #1
    Invité
    Invité(e)
    Par défaut Assignations en orienté objet
    Bonsoir,
    Je programme depuis quelques mois en orienté objet mais j'ai un problème d'assignation que je n'arrive pas à résoudre.
    Voici un programme qui illustre le problème :

    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
     
    static void Main(string[] args)
    {
         CustomInt Int1 = new CustomInt(10);
         CustomInt Int2 = Int1;
     
         Int2.Value += 5;
     
         Console.WriteLine(Int2.Value); //Affiche 15
         Console.WriteLine(Int1.Value); //Affiche aussi 15
     
         Console.ReadLine();
    }
     
     
    public class CustomInt
    {
         public int Value;
     
         public CustomInt(int value)
         {
              Value = value;
         }
    }
    Dans ce code, je veux juste que Int2 prenne la valeur de Int1 sans lier les deux entre elles.
    Une solution serait d'utiliser une struct au lieu d'une classe pour CustomInt, mais je ne peux pas faire ça car dans mon vrai programme il s'agit d'un MediaPlayer qui est forcément une classe.
    Comment faire svp ?

    Merci d'avance.
    Dernière modification par Invité ; 11/03/2021 à 22h57.

  2. #2
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 896
    Points : 1 912
    Points
    1 912
    Par défaut
    Les classes créent des types référence, c'est-à-dire que l'objet est créé dans une zone mémoire et les variables référencent cet objet. Lorsque l'on assigne une variable référence à une autre les deux variables désignent alors le même objet. Les structure créent des types valeur, l'objet est créé "sur place" et la variable est constitué de cet objet. Lorsque l'on assigne une variable valeur à une autre, l'objet lui-même est copié.

    Si ton type sert juste à stocker une valeur une variable de type valeur peut suffire.

    S'il s'agit d'un objet plus complexe ou de avec un rôle de service, il vaut mieux faire une classe, mais du coup une copie doit être généré explicitement. Le mieux est alors de faire ce qu'on appelle un constructeur de copie, c'est-à-dire qu'il prend en paramètre un autre objet du même type afin de s'initialiser avec les données de l'objet source (attention du coup à faire une copie en profondeur et pas juste superficielle).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class CustomInt
    {
      public int Value { get; set; }
     
      public CustomInt(int value = default) => Value = value;
     
      public CustomInt(CustomInt source) : this(source.Value) { }
    }
    À voir ensuite l'accessibilité que tu veux donner à tes propriétés (par exemple que Value soit public en lecture mais privé en écriture), mais cela induit d'autres choix d'architecture.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/05/2017, 12h28
  2. Faut-il éviter de distraire les débutants avec l'orientée objet ?
    Par tarikbenmerar dans le forum Actualités
    Réponses: 165
    Dernier message: 26/07/2014, 20h53
  3. Tableau html avec évènements. Orienté objet ou non ?
    Par tidus_6_9_2 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/09/2010, 11h12
  4. Réponses: 0
    Dernier message: 06/06/2008, 08h41
  5. Programmation orienté objet avec vb
    Par anisj1m dans le forum VBScript
    Réponses: 10
    Dernier message: 07/05/2008, 17h19

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