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

Windows Forms Discussion :

[C#][1.1] - Comment tester l'existence d'un objet.


Sujet :

Windows Forms

  1. #1
    Membre éclairé
    Inscrit en
    Mars 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Mars 2003
    Messages : 281
    Par défaut [C#][1.1] - Comment tester l'existence d'un objet.
    Bonjour,

    Quel est l'équivalent de la fonction Assigned(obj) de delphi.

    Tester obj==null ne suffit pas
    je voudrais etre sur que "obj" n'a pas été détruit.

    Merci.

  2. #2
    Membre émérite
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Par défaut
    j'ai tjrs utiliser == null pour savoir si mon objet existe.

    Fait voir ton bout de code!!

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Mars 2003
    Messages : 281
    Par défaut
    Prenons le code suivant sous D7 :
    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
     
    var
       MaListe : Tlist;
       Obj : TUnObjetQuelconque;
    begin
       ...
     
        MaListe.add(obj); 
        obj.free;
       // a ce stade, MaListe[0] contient toujours l'adresse de l'objet obj.
       // => le test de la valeur nulle ne suffit pas :
       if ( MaListe[0]!=nil) then
        TUnObjetQuelconque( Maliste[0]).UneMethode; // Provoque une exception   (normal)
     
       //Pour ne pas avoir d'erreur :
       if assigned( MaListe[0])  then
           TUnObjetQuelconque( Maliste[0]).UneMethode
      else
          Maliste.Remove(0) ;  // on purge la ligne
    end;
    Maintenant quand on est en C#

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ArrayList MaListe = new ArrayList();
    MaClasse Obj = new MaClasse();
    MaListe.add(Obj);
    Si quelque part dans l'application, Obj est volontairement détruit (par exemple via l'interface IDisposable),
    Que renvoi MaListe[0] ? null ou une référence d'objet ?
    Est-ce que MaListe est modifié (obj supprimé de la liste => un élément de moins dans la liste)

    Mes questions sont peut-etre basiques, mais je ne connais pas encore toute les subtilités du C#

    Merci.

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Lorsque tu fais:

    MaListe.add(Obj);

    tu stockes une copie de ton objet dans l'ArrayList.

    Si Obj est détruit dans ton programme, MaListe[0] contiendra toujours un objet de type MaClasse


    A+

  5. #5
    Membre éclairé
    Inscrit en
    Mars 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Mars 2003
    Messages : 281
    Par défaut
    Morpheus, ta réponse m'étonne et m'inquiète un peu.

    Ca veut dire que, que si je modifie ((MaClasse) MaListe[0]).ProprieteX
    alors Obj n'est pas modifié ( et vice-et-versa).

    Si je ne me trompe pas, le comportement sous D7 est différent.
    Quand je fais MaListe.Add(obj) en pascal :
    obj et MaListe[0] pointe sur le meme objet.

    Dans ce cas comment faut'il faire en C# ?
    Je veux que MaListe[0] et obj représente le même objet

    Merci.

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Citation Envoyé par RamDevTeam
    Morpheus, ta réponse m'étonne et m'inquiète un peu.

    Ca veut dire que, que si je modifie ((MaClasse) MaListe[0]).ProprieteX
    alors Obj n'est pas modifié ( et vice-et-versa).
    Le mieux est de faire le test toi même (comme je l'ai fait car j'ai eu un doute)mais oui, c'est bien cela

    Si je ne me trompe pas, le comportement sous D7 est différent.
    Quand je fais MaListe.Add(obj) en pascal :
    obj et MaListe[0] pointe sur le meme objet.
    En D7, les ArrayList contiennent des pointeurs ?
    Je ne connais pas Delphi donc là, on voit bien une différence entre les 2 langages


    A+

  7. #7
    Membre éclairé
    Inscrit en
    Mars 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Mars 2003
    Messages : 281
    Par défaut
    En D7, les ArrayList contiennent des pointeurs ?
    Je ne connais pas Delphi donc là, on voit bien une différence entre les 2 langages
    Ca fait partie des différences (et donc mauvaises surprises) qu'on découvre au fur et à mesure.


    Dans ce cas, Comment faire en c# pour que l'obj et liste[0] renvoi le même objet, est-ce possible ?

  8. #8
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Etant donné que l'ArrayList ne peut contenir que des objets, je ne sais pas si cela est possible

  9. #9
    Membre émérite
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Par défaut
    quand tu fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    maclass c = new maclass();
    c = une référence vers maclass

    quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ArrayList a = new ArrayList();
    a.add(c);
    Tu ajoute une référence dans ton arraylist.
    Si tu fais
    ton arraylist contient encore une référence, seulement le pointeur c vers ton object est détruit, Mais ton object existe encore en mémoire donc tu peux aller le récupéré avec le pointeur que tu as dans l'arraylist.

  10. #10
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    tout à fait


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ArrayList MaListe = new ArrayList();
    MaClasse Obj = new MaClasse();
    MaListe.add(Obj);
    si tu modifies Obj, MaListe[0] sera aussi modifié
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  11. #11
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    En effet, c'est moi qui t'ai dit une bétise

    Dans ton ArrayList, tu stockes bien des références vers tes objets

    Mea culpa

Discussions similaires

  1. [PL/SQL] Comment tester l'existence d'un champ?
    Par nanou9999 dans le forum Oracle
    Réponses: 4
    Dernier message: 19/04/2012, 15h25
  2. Réponses: 3
    Dernier message: 23/01/2006, 15h40
  3. comment tester l'existence d'un propriété?
    Par korntex5 dans le forum Langage
    Réponses: 2
    Dernier message: 06/01/2006, 14h23
  4. Socket : comment tester l'existence d'un serveur?
    Par bios dans le forum Réseau
    Réponses: 4
    Dernier message: 26/12/2005, 16h51
  5. [IdTCP] Comment tester l'existence de messages en attente ?
    Par HopeLeaves dans le forum Web & réseau
    Réponses: 1
    Dernier message: 29/06/2005, 10h03

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