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 :

Transmettre un champ privé à une méthode d'une autre classe


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Fonctionnaire
    Inscrit en
    Novembre 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fonctionnaire

    Informations forums :
    Inscription : Novembre 2017
    Messages : 20
    Par défaut Transmettre un champ privé à une méthode d'une autre classe
    Bonjour à tous,

    Ce que j'essaye de faire n'est peut-être pas propre, mais si jamais vous avez une solution fonctionnelle et propre je serais ravi :-)

    J'ai une classe MyClass qui a un champ privé _myField, auquel je voudrais m'assurer que personne d'autre n'accède... Sauf que pour simplifier cette classe, j'ai créé une classe "outil" qu'on appellera MyClassData qui ne m'est utile que dans la première phase. Et j'aurais besoin qu'une de ses méthodes accède à _myField.

    Ce que je fais aujourd'hui c'est que, dans une méthode de MyClass, j'ai un objet MyClassData sur lequel j'appelle une méthode avec _myField en paramètre. Or, j'ai l'impression que la méthode n'agit pas directement sur _myField, mais sur une copie de ce champ... car quand je réutilise _myField dans MyClass, j'ai des trucs bizarres...

    Voici en gros le code:

    Code C# : 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
    public class MyClass
    {
        private _myField;
     
        private void MethodeA()
        {
        var a = new MyClassData();
        var b = a.MethodeB(_myField);
        }
    }
     
    public class MyDataClass
    {
        public int MethodeB(MyFieldClass myField)
        {
        // des choses sur myField;
        }
    }

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 449
    Par défaut
    Bonjour,
    "Pour moi", si la méthode de la deuxième classe doit agir sur le contenu du membre privé de la première classe, elle doit le recevoir en paramètre ET renvoyer la nouvelle valeur.
    Sinon tu peux passer le membre par référence.
    Je ne suis pas fan (sauf cas exceptionnel, par exemple une méthode qui modifie un paramètre et renvoie un booléen pour indiquer que tout c'est bien passé, comme DateTime.TryParse()), mais ça fonctionne.

    Tatayo.

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Par défaut
    Le comportement sera different du type de myfiled:
    si le type est un type valeur comme
    • int
    • int?
    • decimal
    • char
    • enum
    • datetime
    • string (c'est plus long a expliquer mais cela se comporte comme un type valeur en c#)


    Alors lors que tu passe la variable myfiled, une copie de la valeure est creer.


    Si le type de myfiled est un object alors une copie du pointeur de myfiled sera cree, et donc tu va a la fin modifier ses valeurs.

    Et pour repondre a ta question, sans en savoir vraiment plus, je convertirai la variable en propriete publique pour l'instant.

  4. #4
    Membre averti
    Homme Profil pro
    Fonctionnaire
    Inscrit en
    Novembre 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fonctionnaire

    Informations forums :
    Inscription : Novembre 2017
    Messages : 20
    Par défaut
    Merci pour vos réponses !
    Je pensais que le problème dans mon programme venait du fait que je transmettais le champ et que d'une façon ou d'une autre il agissait sur une copie... mais après avoir tout remis au propre, finalement ça ne venait pas de ça...

    Au moins mon code est plus propre ! Merci

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/01/2011, 14h59
  2. order by "un-champ-dans-une-autre-table"
    Par SnakeBoudoir dans le forum Requêtes
    Réponses: 3
    Dernier message: 23/03/2005, 10h55
  3. UPDATE d'une table avec test d'un champ d'une autre table
    Par delphim dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/05/2004, 12h30
  4. afficher un champ d'une autre table, Help!
    Par chakan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/03/2004, 23h20
  5. [CR] Afficher un champs lié à un champs d'une autre table
    Par Madduck dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 17/09/2003, 11h48

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