2010-03-17 4 views
1

Dois-je disposer de l'objet GDI + avant sa création?Dois-je disposer de l'objet GDI + avant sa création?

Il est recommandé de toujours éliminer l'objet GDI + après l'avoir utilisé.

par ex.

Pen p = new Pen(Color.Green); 
// use 'p' 
p.Dispose(); 

maintenant, si j'ai cette situation:

Pen p = new Pen(Color.Green); 
// use green 'p' 

p = new Pen(Color.Red); // Should I Dispose my 'p' first? 
// use red 'p' 

p.Dispose(); 

EDIT A:

Utiliser 'UTILISATION' est pas possible à chaque fois.

private Pen p; 

public RefreshPen(style) 
{ 
    // p.Dispose(); +- 
    p = new Pen(style.Color); 
    // etc. 
} 

EDIT B:

ce que ce sera OK?

using (Pen p = new Pen(Color.Green)) 
{ 
    // use green 'p' 

    p = new Pen(Color.Red); // Should I Dispose my 'p' first? 
    // use red 'p' 

    p = new Pen(Color.Blue); // Should I Dispose my 'p' first? 
    // use blue 'p' 
} 

Répondre

3

Oui, vous devriez. (A noter également que la déclaration using est une aide précieuse ici. Je très appelle rarement .Dispose explicitement. using se charge de cela.)

+0

peut-être, mais voir mon édition. en passant, vous diriez que «utiliser» vous aidera à disposer même dans plusieurs créations d'objets consécutifs comme dans l'exemple (vert/rouge)? – serhio

+0

+1. Je n'aurais pas une méthode "RefreshPen" comme ça parce que ça rend difficile l'utilisation d'une instruction "using". – David

+0

@David: Que se passe-t-il si vous avez un contrôle personnalisé et que vous dessinez (Paint) avec un stylo, ce qui devrait conditionnellement changer un style? – serhio

1

Oui. Vous créez un nouvel objet et l'attribuez à p, ce qui signifie que vous devez disposer de l'ancien objet.

je pourrais coder comme ceci:

using(Pen p = new Pen(Color.Green)) 
{ 
    //do some stuff 
} 

using(Pen q = new Pen(Color.Red)) 
{ 
    //do some other stuff 
} 

Cela vous empêche d'oublier de jeter le stylo, ou en utilisant un objet disposé.

+0

peut-être, mais voir mon édition. – serhio

+0

@serhio - Pas peut-être ... définitivement oui. Même si vous l'attribuez à la même variable nommée 'p' ... c'est un * objet entièrement nouveau *. L'ancien doit être jeté correctement avant de faire la nouvelle déclaration Pen, car après cela, vous avez perdu la référence à l'ancien Pen, et vous n'aurez plus jamais la possibilité d'appeler à nouveau Dispose. – Nick

+0

@Nick - "Peut-être" était d'utiliser 'using', qui ne peut pas être combiné avec une variable privée. – serhio

1

Vous ne pouvez pas simplement changer les propriétés de l'objet?

Pen p = new Pen(Color.Green); 
//use it here. 
p.Color = Color.Red; 
//use it some more. 
p.Dispose(); 
+0

oui. tu as raison, enfin, j'ai adopté cette "stratégie". Juste comme j'ai formulé la question ceci n'est pas une réponse :) – serhio