OVH Cloud OVH Cloud

Faut-il appeler la méthode Dispose pour tous les attributs d'une classe ?

2 réponses
Avatar
Gilles TOURREAU
Bonjour tout le monde !

Soit le code suivant :

public class MaClass
{
private Pen pen;

public MaClass()
{
this.MonPen = CréerUnPenParDéfaut();
}

public Pen MonPen
{
get { return this.pen; }
set { this.pen = value; }
}
}

Est-ce que dans ce cas, je dois implémenter l'interface IDisposable de
telle façon :

public void Dispose()
{
if (pen != null)
pen.Dispose()
GC.SuppressFinalizer(this);
}

Sachant que la propriété MaClass.MonPen peut être affecté à n'importe
quel endroit d'une application...

En vous remerciant par avance de vos lumières !

Cordialement

--
Gilles TOURREAU
Responsable informatique
gilles.tourreau@pos.fr

Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr

2 réponses

Avatar
CrazyHT
Bonsoir,

A mon sens toutes variables éxterieures à une classe ne doit pas être
disposée par celle ci.

Le dispose doit être reservé aux variables membres internes exposées en
lecture seule (au maximum).

Cordialement,

TINANT Hervé
MVP C#
http://www.csharpfr.com

"Gilles TOURREAU" wrote in message
news:
Bonjour tout le monde !

Soit le code suivant :

public class MaClass
{
private Pen pen;

public MaClass()
{
this.MonPen = CréerUnPenParDéfaut();
}

public Pen MonPen
{
get { return this.pen; }
set { this.pen = value; }
}
}

Est-ce que dans ce cas, je dois implémenter l'interface IDisposable de
telle façon :

public void Dispose()
{
if (pen != null)
pen.Dispose()
GC.SuppressFinalizer(this);
}

Sachant que la propriété MaClass.MonPen peut être affecté à n'importe quel
endroit d'une application...

En vous remerciant par avance de vos lumières !

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr




Avatar
Simon Mourier [SoftFluent]
Oui c'est mieux. Pour un pattern simple, il vaut mieux faire

public void Dispose()
{
if (pen != null)
{
pen.Dispose()
pen = null;
}
}

et cf ici: http://msdn2.microsoft.com/en-us/library/fs2xkftw.aspx pour un
pattern complet (avec disposing, etc...)

Simon.
www.softfluent.com


"Gilles TOURREAU" a écrit dans le message de news:

Bonjour tout le monde !

Soit le code suivant :

public class MaClass
{
private Pen pen;

public MaClass()
{
this.MonPen = CréerUnPenParDéfaut();
}

public Pen MonPen
{
get { return this.pen; }
set { this.pen = value; }
}
}

Est-ce que dans ce cas, je dois implémenter l'interface IDisposable de
telle façon :

public void Dispose()
{
if (pen != null)
pen.Dispose()
GC.SuppressFinalizer(this);
}

Sachant que la propriété MaClass.MonPen peut être affecté à n'importe quel
endroit d'une application...

En vous remerciant par avance de vos lumières !

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr