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 :

Pointeur sur une chaine de caractère string


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Points : 80
    Points
    80
    Par défaut Pointeur sur une chaine de caractère string
    Bonjour,

    J'aimerais savoir si il était possible de manipuler des pointeurs sur une string C# (sans avoir à utiliser le unsafe).
    Je voudrais avoir une classe de manipulation de chaine qui prenne en paramètre un attribut string d'une autre classe et que ces 2 string pointent sur la même zone mémoire afin que lorsque l'on affecte une valeur d'un coté celle-ci soit répercutée de l'autre.
    En espérant avoir été assez clair, Merci.

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    Salut,

    il faut utiliser le mot clé ref devant le paramètre de ta méthode. De cette manière tu passes une référence vers la chaîne, pas la chaîne elle même.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Points : 80
    Points
    80
    Par défaut
    Merci pour la réponse mais je l'ai deja essayer
    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
     
    static void Main(string[] args)
    {
                Testtest = new Test();
                test.mServerURL = "DEVELOPPEZ.COM";
                test.mPassword = "C#";
                test.SaveInfosConfig();
    }
     
    class cSaveData
    {
            public string mName;
            public string mValue;
     
            internal cPayDataProvider(string _Name, ref string _Value)
            {
                mName = _Name;
                mValue = _Value;
            }
    }
     
    class Test
    {
            public string mPassword = "";
            public string mServerURL = "";
            Dictionary<int, cSaveData> mInfosConfig = new Dictionary<int, cSaveData>();
     
            internal Test()
            {
                mInfosConfig.Add(1, new cSaveData("Password", ref mPassword));
                mInfosConfig.Add(2, new cSaveData("ServerURL", ref mServerURL));
            }
    }
    Une fois lors de la sauvegarde les champs de ma classe "mPassword" et "mServerURL" sont bien renseignés mais les champs correspondant dans le mInfosConfig sont vides.

    Merci encore pour l'aide. (Je sais que ce que je veux faire est une peu tiré par les cheveux, sorry )

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Lucier Voir le message
    J'aimerais savoir si il était possible de manipuler des pointeurs sur une string C# (sans avoir à utiliser le unsafe).
    Je voudrais avoir une classe de manipulation de chaine qui prenne en paramètre un attribut string d'une autre classe et que ces 2 string pointent sur la même zone mémoire afin que lorsque l'on affecte une valeur d'un coté celle-ci soit répercutée de l'autre.
    Ce n'est pas possible. Tu peux passer un paramètre par référence, mais tu ne peux pas conserver cette référence.

    Si tu as besoin de faire ça, c'est qu'à mon avis il y un problème de conception dans ton code... Qu'est-ce que tu cherches à faire exactement ?

    (*) en fait je crois qu'il y a un moyen de bidouiller pour faire ça, en jouant avec des mots clés "cachés" (non documentés) et le type TypedReference, mais là on s'aventure en terrain hostile...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Points : 80
    Points
    80
    Par défaut
    C'est vrai que la conception laisse peut être à désirer (mais j'aime aller au bout de mes conneries pour bien comprendre le fonctionnement). Le principe est de faire une gestion d'enregistrement par une classe parent.
    Je voudrais juste que dans la classe enfant on est à "définir" la structure du fichier avec la notion ordonnancement. C'est à dire juste ca.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    internal Test()
    {
                mInfosConfig.Add(1, new cSaveData("Password", ref mPassword));
                mInfosConfig.Add(2, new cSaveData("ServerURL", ref mServerURL));
    }
    Et que la classe parent puisse générer un fichier avec ses informations, enregistrement, recherche etc...
    (Je pourrais utiliser la sérialisation native avec une classe ou un XSD mais je voulais savoir si je pouvais alléger le processus déclaratif...)

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Lucier Voir le message
    (Je pourrais utiliser la sérialisation native avec une classe ou un XSD mais je voulais savoir si je pouvais alléger le processus déclaratif...)
    euh... tu trouves vraiment ça plus léger ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Points : 80
    Points
    80
    Par défaut
    La gestion derrière que je fais non pas forcément, mais du coté de la déclaration ouais quand même.
    La création d'une nouvelle classe enfant avant sa structure est quand même pas mal simplifier la...

    J'ai pas mis le code de la classe parent mais elle gère pas mal de chose (création hiérarchiques de répertoire, création du fichier etc..), après les personnes qui vont faire de nouvelles classes ne se soucieront plus du tout de rien, 3 lignes et c'est ok.
    Même si je suis conscient que sur ce premier jet y'a pas mal de faille et que je fonce un peu dans le mur mais bon c'est bien de comprendre comment ca marche jusqu'au bout!!

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Points : 80
    Points
    80
    Par défaut
    Donc il n'y a pas vraiment de solution clean pour achever mon idée ?

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    ben pas de cette façon en tous cas...

    à la limite, en passant par des delegates, tu pourrais peut-être faire un truc similaire :

    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
    class cSaveData
    {
            public string mName;
            private Func<string> _getter;
            private Action<string> _setter;
     
            internal cPayDataProvider(string _Name, Func<string> getter, Action<string> setter)
            {
                mName = _Name;
                _getter = getter;
                _setter = setter;
            }
     
            public string GetValue()
            {
                return _getter();
            }
     
            public void SetValue(string s)
            {
                _setter(s);
            }
    }
    Et dans ton constructeur, tu ferais quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                mInfosConfig.Add(1, new cSaveData("Password", () => mPassword, s => mPassword = s));
                mInfosConfig.Add(2, new cSaveData("ServerURL", () => mServerURL, s => mServerURL = s));
    (en gros, tu passes en paramètre la fonction qui renvoie la valeur, et la fonction qui la définit)

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Points : 80
    Points
    80
    Par défaut
    Ok, merci beaucoup tomlev pour ces réponses!!
    J'avais pensé aux accesseurs mais je voulais éviter que les classes enfants doivent à chaque fois les déclarer.
    En tout cas merci.

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

Discussions similaires

  1. [Tableaux] Test sur une chaine de caractères et affichage
    Par ferjani.kais dans le forum Langage
    Réponses: 2
    Dernier message: 04/01/2008, 17h59
  2. tr et sed sur une chaine de caractére
    Par elflamby dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 13/09/2007, 16h20
  3. Test sur une chaine de caractéres
    Par Je-cherche-pfe dans le forum C#
    Réponses: 3
    Dernier message: 04/09/2007, 23h44
  4. prèlèvements sur une chaine de caractères
    Par Nicobp dans le forum Langage
    Réponses: 2
    Dernier message: 11/10/2006, 01h14
  5. Dégradé sur une chaine de caractères avec 3 a 4 couleurs
    Par avogadro dans le forum Composants VCL
    Réponses: 6
    Dernier message: 31/03/2006, 13h21

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