L'élimination de l'objet en C#
J'ai écrit la classe suivante:
public class CoupleFrames
{
public CoupleFrames(ColorImageFrame cif, Bitmap df)
{
this.colorFrame = cif;
this.desktopFrame = df;
}
public ColorImageFrame colorFrame;
public Bitmap desktopFrame;
}
Maintenant, je suis en utilisant le code suivant pour l'élimination des variables.
CoupleFrames cf = new CoupleFrames(frame1, frame2);
//some code...
cf.colorFrame.Dispose();
cf.desktopFrame.Dispose();
Je ne suis pas sûr que ce soit la bonne façon. Quelqu'un peut me suggérer la façon correcte pour l'élimination de la totalité de l'objet?
Cela dépend si vous voulez le type pour prendre possession des variables passées au constructeur; si non, l'utilisation d'une aide pour les variables, sinon de mettre en œuvre IDisposable sur le type et l'avoir à gérer les ressources.
OriginalL'auteur GVillani82 | 2013-06-26
Vous devez vous connecter pour publier un commentaire.
Assurez - vous devriez faire
CoupleFrames
mettre en œuvreIDisposable
, et sonDispose
méthode doit disposer des objets qu'il "possède". Par exemple:Quelques points à noter:
CoupleFrame
vraiment le "propriétaire" de ces objets constitutifs. L'élimination s'appuie sur un modèle de propriétéCoupleFrame
n'est pas scellé (et ne peut pas être le cas) vous pouvez avoir besoin d'aller dans une plus compliqué modèle virtuel avec des méthodes et des outils de finalisation. Il peut devenir très compliqué, et vous devriez lire le les conseils donnés ici par Joe Duffy et al. Si votre classe est scellé, beaucoup de que la complexité va loinCoupleFrame
mettre en œuvreIDisposable
, vous êtes essentiellement en disant à tous les clients qu'ils doivent disposer de toute instance qu'ils possèdent. Si vous n'êtes pas heureux avec l'imposition de ce fardeau, vous avez besoin de repenser la conception un peu.CoupleFrames
ne pas instancier ces 2 députés, nous devons vérifier NRE dans la méthode dispose.J'avais effectivement mis à la non-nullité de validation dans le constructeur. Modifier pour indiquer que.
Donc, j'ai besoin également de tester si les membres sont nuls?
Vous avez besoin de tester quelque part - est-il valable pour
null
valeurs à être passé dans le constructeur? Si pas, lever une exception. Si c'est le cas, vérifiez avant d'essayer de les éliminer.Merci, mis à jour le lien.
OriginalL'auteur Jon Skeet
Je voudrais mettre en œuvre la Modèle dispose
OriginalL'auteur rexcfnghk
Mettre en œuvre IDisposable dans votre classe et de l'avoir éliminer les variables de membre à partir de là.
OriginalL'auteur Jack Hughes
Vous pouvez utiliser le
IDisposable
interface.Vous pouvez utiliser le destructeur d'appeler la méthode dispose depuis l'objet peut parfois être supprimé par le GC.
OriginalL'auteur Sri Harsha Chilakapati
Faire CoupleFrames Implémenter l'Interface Idisposable.
OriginalL'auteur Avi Turner