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

Dotnet Discussion :

Classe passées par reférence et arguments avec Ref


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de TSalm
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 361
    Par défaut Classe passées par reférence et arguments avec Ref
    Bonjour,

    Les variables qui ne sont pas des "types de base" sont, passés par réference si j'ai bien compris.
    Je ne comprends pas, dés lors, l'utilité d'utiliser Ref dans le passage de variable ??
    si quelqu'un pouvait m'éclairer

    D'avance merci,
    TSalm

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Salut,

    deux principales utilités à ref, tout d'abord le passage de type valeur sans copie. Pour des grosses structures (car une struct se comporte comme ce que tu nommes un type de base (en fait un type valeur)) avec beaucoup d'appel en cascade (le traitement des messages windows en winform par exemple), ca peut etre interressant. Ensuite, cela permet (le mot clé ref) de forcer le passage d'un argument par reference, que celui ci soit un type valeur ou reference. Un code sera plus parlant :

    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
        public class Program
        {
            static void Main()
            {
                A a = null;
     
                Method(a);
     
     
                RefMethod(ref a);
            }
     
     
            static void RefMethod(ref A s)
            {
                s = new A("ref");
            }
     
            static void Method(A s)
            {
                s = new A("normal");
            }
     
            class A
            {
                string m_id;
                public A(string id)
                {
                    m_id = id;
                }
     
                public override string ToString()
                {
                    return m_id;
                }
            }
        }
    ici, quand je passe ma variable a à ma methode sans le passer par ref et que j'instancie un nouveau A, au retour de la methode ma variable vaut toujours la meme chose (null ici), si tu es familier avec les pointeurs, c'est assez proche des pointeurs de pointeurs pour delegué l'allocation. A noter enfin, que pour le schema ci dessus, on utilisera pas ref mais out qui fait exactement la meme chose mais oblige la fonction à initialiser la variable.

    Bon courage.

  3. #3
    Membre éclairé Avatar de TSalm
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 361
    Par défaut
    c'est très clair
    merci !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/12/2010, 12h20
  2. Réponses: 9
    Dernier message: 10/05/2010, 21h35
  3. Réponses: 2
    Dernier message: 06/11/2007, 13h23
  4. argument avec espace passé en ligne de commande
    Par gorgonite dans le forum Langage
    Réponses: 9
    Dernier message: 07/05/2007, 23h07

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