Bonjour tous le monde,

j'aimerai passer une classe par référence à une méthode qui détruit tous simplement cette classe et ses enfants,

ceci se passe dans un environnement graphique et du coup cette méthode me sert a détruit les objets qui ne sont plus utilisables,

la méthode est :

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
 
public static void DisposeIGfxAndChild(IGfx igfx)
        {
            #region
            // supression d'un IGfx et de ses enfants
            if (igfx != null)
            {
                // cast de l'objet
                if (igfx.GetType() == typeof(Bmp))
                {
                    Bmp b = igfx as Bmp;
                    b.Visible = false;
                    b.Child.Clear();
                }
                else if (igfx.GetType() == typeof(Rec))
                {
                    Rec r = igfx as Rec;
                    r.Visible = false;
                    r.Child.Clear();
                }
                else if (igfx.GetType() == typeof(Anim))
                {
                    Anim a = igfx as Anim;
                    a.Visible(false);
                    a.Close();       // arret de l'animation
                    a.img.Child.Clear();
                }
 
                // supression du parent
                if (igfx.GetType() == typeof(Bmp))
                {
                    (igfx as Bmp).Visible = false;
                    (igfx as Bmp).bmp = null;
                    igfx = null;
                }
                else if (igfx.GetType() == typeof(Anim))
                {
                    (igfx as Anim).img.Visible = false;
                    (igfx as Anim).Close();
                    (igfx as Anim).img = null;
                    igfx = null;
                }
                else if (igfx.GetType() == typeof(Rec))
                {
                    (igfx as Rec).Visible = false;
                    igfx = null;
                }
                else if (igfx.GetType() == typeof(Txt))
                {
                    (igfx as Txt).Visible = false;
                    igfx = null;
                }
            }
 
            // netoyage des list
            IGfxList.RemoveAll(f => f == null);
            #endregion
        }
pour IGfx c'est une Interface pour les classes Bmp (Bitmap), Rec (Rectangle), Anim (Animation), Txt (Text) qui hèrite de cette interface

donc quand j'appel la méthode DisposeIGfxAndChild avec le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
IGfx __PlayerStats = IGfxList.FindAll(f => f.GetType() == typeof(Rec) && (f as Rec).name == "__playerStatesInBattleRecParent");
DisposeIGfxAndChild(__PlayerStats);
la y a un truc qui ne passe pas comme je le souhaite, c'est que l'objet passé par référence ne se retire pas de la liste après l'avoir mis sur null
c-à-d le code suivant :
IGfxList.RemoveAll(f => f == null);
ne supprime pas l'objet de la liste, et après débogage, l'objet passé par référence n'a pas subit de changement et n'est null, mais on dirai que c'est l'objet en cours qui est null, du coup aucune correspondance dans la liste IGfxList alors que l'objet existe toujours puisque je le trouve sous le nom "__playerStatesInBattleRecParent" mais pas null

j'ai compris alors qu'il faut passer l'objet pas le mot clef Ref,
chose faite et j'appel avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
DisposeIGfxAndChild(ref __PlayerStats);
et j'ai créée une surcharge de la méthode de destruction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
public static void DisposeIGfxAndChild(Ref IGfx igfx)
        {
        ...
        }
Erreur de compilation :
Une propriété, un indexeur ou l'accès au membre dynamique ne peut pas être passé en tant que paramètre de sortie (out) ni de référence (ref)

je pige rien, une idée svp ?