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 :

type valeur et type reference


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 46
    Par défaut type valeur et type reference
    Bonjour,
    j'ai trouvé dans un document que la manipulation d'un string revient a la manipulation des référence
    donc j'ai fait ce petit programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    static class Program
        {
            String c1 = "";
            static void Main()
            {
               test(c1);
                MessageBox.Show(c1);===> il affiche chaine vide
            }
            public void test(String c)
            {
                c= "dali";
            }
        }
    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
     
        static class Program
        {
           Class1 c1=new Class1();
            static void Main()
            {
                test(c1);
                MessageBox.Show(c1.S); ===> il affiche bien dali
            }
            public void test(Class1 c)
            {
                c.S = "dali";
            }
     
        }
        public class Class1
        {
            public string S = "";
        }
    pouvez vous l'expliqué la diférence

  2. #2
    Membre chevronné
    Inscrit en
    Octobre 2005
    Messages
    400
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 400
    Par défaut
    Oui, une classe est passé par référence, un string n'est pas passé par référence par défaut. Tu peux en revanche passer un string par référence (en utilsant 'out' ou 'ref' ça doit normalement fonctionner). La différence est que le mot clé 'out' nécessite une affectation dans la méthode appelé

  3. #3
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 46
    Par défaut
    merci pour votre réponse
    pourquoi string n'est pas passé par référence par défaut?c'est un objet de type référence? non?

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Par défaut
    Citation Envoyé par dalio Voir le message
    merci pour votre réponse
    pourquoi string n'est pas passé par référence par défaut?c'est un objet de type référence? non?
    Oui mais c'est un mauvais exemple. Même si c'est un type référence, il se comporte comme un type valeur. Comme exemple, une simple affectation via "=" change le contenu de la chaîne mais la référence.

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    en .net il y a les types par valeurs (int, boolean, date, les structures etc...)
    il ne peuvent pas valoir null, ils ont forcément une valeur par défaut
    avec le mot clé ref, on peut les modifier avec retour de la modification de la valeur à l'appelant

    les types par référence (object, les classes ...) eux ont un pointeur et valent null par défaut
    avec le mot clé ref c'est le pointeur de l'objet qui est passé (alors que sans, c'est une copie du pointeur qui est passé)
    dans les 2 cas les modifications sont visibles par l'appelant, car c'est l'objet pointé qui est modifié
    avec ref, on peut mettre à null et l'appelant voit alors null, sans ref, c'est une copie du pointeur qui est mises à null dans ce cas, et donc l'appelant garde son pointeur

    le string est à cheval entre les 2, il peut etre à null comme les types par références, mais il est traité par la pile comme les types par valeur
    en fait en plus des types par valeur et des types par référence, il y a les les types gérés dans la pile et les types gérés dans le tas
    string est un type par référence géré dans la pile
    les classes sont des types par référence géré dans le tas
    les int et autre sont des types par valeur géré dans la pile
    et le mot ref n'influence pas les types par référence mais les types gérés dans le tas
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 46
    Par défaut
    Merci pour la réponse
    la dernière réponse ma permis de faire ca !!

    il se plante?

    plus d'explication merci

    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
     
     static class Program
        {
           Class1 c1=null;
            static void Main()
            {
                test(c1);
                MessageBox.Show(c1.S); ===> plante
            }
            public void test(Class1 c)
            {
                c = new Class1();
                c.S = "dali";
            }
     
        }
        public class Class1
        {
            public string S = "";
        }

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

Discussions similaires

  1. [PHP 5.1] Type valeur input != Type valeur textarea
    Par Federico_muy_bien dans le forum Langage
    Réponses: 9
    Dernier message: 11/08/2010, 14h34
  2. plusieurs select avec valeur du type valeur[indice]
    Par varex dans le forum Struts 1
    Réponses: 4
    Dernier message: 24/11/2008, 17h01
  3. Type polymorphiques et types valeurs
    Par balteo dans le forum C++
    Réponses: 11
    Dernier message: 01/04/2008, 09h22
  4. insérer une valeur de type float dans une abse de données
    Par Stephane_br dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/11/2005, 10h47
  5. [JDBC] Affichage d'une valeur de type CloB
    Par Jihed Amine Maaref dans le forum JDBC
    Réponses: 3
    Dernier message: 07/04/2005, 15h03

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