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 :

faire d'un membre une reference, est ce possible?


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut faire d'un membre une reference, est ce possible?
    Bonjour a tous.

    Je fais une dll de classe, et j'aimerai que l'un de mes membres soit une reference.

    Exemple (qui ne compile pas):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public class MaClasse
    {
         public ref bool m_abort;
    }
    Est ce possible?

    En fait j'aimerai éviter de faire du code unsafe (pointeurs). Or m_abort existe deja ailleur dans mon appli, et sert à faire sortir tous les threads de toutes mes classes. Je ne voudrais pas avoir 36 m_abort dans mon appli....

  2. #2
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    Le mot clé ref est à utilisé uniquement pour des paramètres/arguments de méthode. bool est un type valeur, ce que tu souhaite n'est pas possible. Si tu veux qu'un des membres soit une référence, il faut utiliser des types références (sauf la classe String) donc des classes.

  3. #3
    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 : 43
    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 753
    Points
    39 753
    Par défaut
    Si c'est commun à toutes les instances de la classe, pourquoi ne pas rendre le membre statique ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut
    Merci pour ces eclaircissement harz62, pour l'instant je n'arrive pas à trouver où se situe la classe Reference, vu que quand je recherche "Class Reference", ca me ressort tous les guides de reference de toutes les classes

    Mais je vais bien finir par trouver.

    tomlev : tu m'as mal compris, je n'ai pas dis que je voulais un membre commun à tous les objets d'une classe.

    J'ai une classe dans une dll, je ne veux pas que cette classe appelle ou accede à quoi que ce soit d'exterieur en dur dans le code.

    Car demain je vais surement réutiliser cette dll sur d'autres projets.
    C'est une des raisons pour laquelle j'aimerai créer un membre qui soit une référence.

  5. #5
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    J'ai rien compris ce que tu voulais faire.

    Qu'est ce que tu entends par un membre référence ?

    T'as qu'à faire un type nullable, là ce sera un type référence.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut
    aie aie aie, dur de se faire comprendre. Ok j'essaye de m'expliquer par une autre approche illustrée ce coup ci...

    Voici un bout de code, svp se concentrer sur m_abort et m_abandon, et non sur pourquoi une telle classe, pourquoi pas static,etc... Ce code ne représente pas une partie de mon programme, il met juste en évidence le probleme technique que je veux résoudre...


    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
     class ClasseCore
        {
            private bool m_abandon;
            private Class2 m_objet;
            void Init()
            {
                m_objet = new Class2();
            }
     
            private void ToutArretter()
            {
                //Voir ma note apres le code
                this.m_abandon = true;
                m_objet.m_abort = true;
            }
        }
     
        class Class2
        {
            public bool m_abort;
        }
    Voila dans le code ci dessus, le probleme est que :
    quand je change l'etat de m_abandon, je doit penser à changer l'etat de m_abort.

    1) c'est un coup à oublier de le faire à certains endroit
    2) ca fait plusieurs instructions pour tout mettre à false, alors qu'il s'agit de la meme chose...

    J'ai un peu (à peine) mis mes idées en ordre durant la nuit, par rapport à ce qu'a ecrit harz62.

    Et j'ai tenté ceci, mais je ne suis pas sur de faire ce qu'il faut, en tout cas, ca ne compile pas :

    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
    38
    39
    class ClasseCore
        {
            private bool m_abandon;
            private Class2 m_objet;
            void Init()
            {
                m_objet = new Class2();
                //Dans mon esprit, c'est ici que m_objet.m_abort devient une reference de this.m_abandon
                //Du coup, m_objet.m_abort et this m_abandon ne font qu'un.
                m_objet.Abort = m_abandon;
     
            }
     
            private void ToutArretter()
            {
     
                this.m_abandon = true;
     
            }
        }
     
        class Class2
        {
            private Type m_abort;
     
            public Type Abort
            {
                get { return m_abort; }
                //Dans mon esprit, set sert justement à ce que
                //m_abort, devienne une Reference de value, donc, de m_abandon
                set
                {
                    if (typeof(value) == Boolean)
                        m_abort = value; 
                }
            }
     
     
        }
    Voila, j'espere m'etre mieux fait comprendre, en tout cas merci pour votre attention.

  7. #7
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    question a 2 cents...

    a quoi te sert m_abandon ?

    si m_abandon doit toujours avoir la meme valeur que m_objet.m_abort, pourquoi tu ne fais pas directement reference a m_objet.m_abort dans ta classe ClasseCore ?

    pour l'histoire des types référence et valeurs, regarde ici:
    http://laurent-dardenne.developpez.c...page=page_1#L6

    (delphi, mais même fonctionnement en C#)

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut
    merci pvialatte, malheureusement, je ne comprend pas grand chose à ton document

    Je voulais simplement faire un membre reference comme on en fait en C++
    Malheureusement ca semble etre totalement difference en c#

    Je tourne en rond, alors je vais passer à autre chose, merci quaand meme pour votre aide à tous.

Discussions similaires

  1. rendre une partie d'une phrase variable dans une cellule, est ce possible?
    Par voldo2142 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/02/2008, 09h08
  2. Réponses: 23
    Dernier message: 11/11/2007, 20h01
  3. macro qui crée une macro, est ce possible ?
    Par Djohn dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/07/2007, 09h43
  4. [POO] Classe interne à une classe, est ce possible ?
    Par Matth_S dans le forum Langage
    Réponses: 13
    Dernier message: 10/02/2006, 10h24
  5. Optimiser une requête..est-ce possible ?
    Par Thierry8 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 27/09/2005, 11h31

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