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.
Version imprimable
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.
j'ai tjrs utiliser == null pour savoir si mon objet existe.
Fait voir ton bout de code!!
Prenons le code suivant sous D7 :
Maintenant quand on est en C#Code:
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;
Si quelque part dans l'application, Obj est volontairement détruit (par exemple via l'interface IDisposable),Code:
1
2
3 ArrayList MaListe = new ArrayList(); MaClasse Obj = new MaClasse(); MaListe.add(Obj);
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.
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+
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.
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 :)Citation:
Envoyé par RamDevTeam
En D7, les ArrayList contiennent des pointeurs ?Citation:
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.
Je ne connais pas Delphi donc là, on voit bien une différence entre les 2 langages :)
A+
Ca fait partie des différences (et donc mauvaises surprises) qu'on découvre au fur et à mesure. :?Citation:
En D7, les ArrayList contiennent des pointeurs ?
Je ne connais pas Delphi donc là, on voit bien une différence entre les 2 langages
Dans ce cas, Comment faire en c# pour que l'obj et liste[0] renvoi le même objet, est-ce possible ?
Etant donné que l'ArrayList ne peut contenir que des objets, je ne sais pas si cela est possible :?
quand tu fait
c = une référence vers maclassCode:
1
2 maclass c = new maclass();
quand tu fais
Tu ajoute une référence dans ton arraylist.Code:
1
2
3 ArrayList a = new ArrayList(); a.add(c);
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.Code:
1
2c = null;
tout à fait
si tu modifies Obj, MaListe[0] sera aussi modifiéCode:
1
2
3 ArrayList MaListe = new ArrayList(); MaClasse Obj = new MaClasse(); MaListe.add(Obj);
En effet, c'est moi qui t'ai dit une bétise :oops:
Dans ton ArrayList, tu stockes bien des références vers tes objets
Mea culpa :oops: