Accueil > Forum > > > > Détruire explicitement un objet
Détruire explicitement un objet
vendredi 2 décembre 2005 à 12:00:37 |
Détruire explicitement un objet

0xYg3n3
|
Bonjour, je me demandais comment en C# on pouvait "contrôler la vie d'un objet".
En C++, il y avait les mots clés "new" et "delete", mais en C# il n'y a que "new".
Bref je souhaite connaître l'équivalent C# de "delete".
Par exemple:
Je crée une WindowsForm avec 2 boutons: "Créer" et "Détruire"
Dans "Créer": je fais un "m_MonObjet = new CMaClasse();"
Dans "Détruire": je fais ?
|
|
vendredi 2 décembre 2005 à 12:14:21 |
Re : Détruire explicitement un objet

TheSaib
|
et Dispose() si ton objet est IDisposable.
Mais en .NET il y a un Ramasse-Miette (Garabage Collector)
|
|
vendredi 2 décembre 2005 à 13:41:11 |
Re : Détruire explicitement un objet

Nikoui
|
En .Net, comme en Java, tu ne peux pas demander explicitement la
destruction d'un objet - tu n'a pas à savoir quand il sera détruit.
Tu peux prévoir le code à exécuter lors de sa destruction, en
fournissant un destructeur ( ~MyClass() ) mais tu ne sais pas quand il
sera appelé.
Si tu as des ressources à libérer à un moment précis, il faut dans ce
cas appeler explicitement cette libération, généralement en
implémentant IDisposable, et en appelant Dispose sur ton objet (et en
mettant ton code de libération dans le Dispose).
Attention à l'utilisation de Dispose, il faut que l'objet ne soit "détruit" qu'une fois, dans les deux cas suivant :
- Appel explicite a Dispose
- Pas d'appel a Dispose, destruction par le GarbageCollector (GC)
Pour cela, dans le premier cas, il faut préciser au GC que ton objet à
déjà été traité (je n'ai plus la syntaxe en tête, mais je peux le
retrouver si nécessaire...)
|
|
vendredi 2 décembre 2005 à 13:41:19 |
Re : Détruire explicitement un objet

0xYg3n3
|
public class CEssai
{
public CEssai()
{
MessageBox.Show("Appel constructeur");
}
~CEssai()
{
MessageBox.Show("Appel destructeur");
}
}
public class Form1 : System.Windows.Forms.Form {
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private CEssai m_Essai = null;
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void OnCreer(object sender, System.EventArgs e)
{
if (m_Essai == null) { m_Essai = new CEssai(); }
else { MessageBox.Show("Attribut déja crée"); }
}
private void OnDetruire(object sender, System.EventArgs e)
{
if (m_Essai != null)
{
//Detruire objet: comment faire ?
m_Essai = null;
}
}
}
Ma classe CEssai ne dérive d'aucune autre classe, et je n'ai donc pas de méthode Dispose().
|
|
vendredi 2 décembre 2005 à 13:43:53 |
Re : Détruire explicitement un objet

0xYg3n3
|
On peut pas détruire un objet de par nous même.
C'est pas terrible ça...
|
|
vendredi 2 décembre 2005 à 13:47:01 |
Re : Détruire explicitement un objet

Nikoui
|
Si tu veux une méthode dispose, ta classe doit implémenter IDisposable :
CEssai : IDisposable
>> On peut pas détruire un objet de par nous même.
>> C'est pas terrible ça...
C'est une facon différente de voir les choses, faut s'adapter...
Pourquoi a tu besoin de détruire un objet ? a tu réellement besoin de
savoir quand il sera détruit ?
Il n'y a que quelque cas ou tu répondra oui a la deuxième question, et
dans ce cas tu devra créer et appeler toi même une méthode
'DetruitMoi', ou utiliser Dispose...
|
|
vendredi 2 décembre 2005 à 13:59:07 |
Re : Détruire explicitement un objet

0xYg3n3
|
C'est pas une quese savoir quand il sera détruit.
Ce que je veux c'est détruire l'objet dans une méthode et le créer dans une autre.
En C++ c'était tellement facile avec les opérateurs "new" et "delete".
Mon application démarre dès que l'utilisateur Appuye sur le Bouton "Commencer"
Une fois le bouton "Commencer" appuyer, le logiciel lance une séquence toutes les 5
minutes jusqu'a l'appui sur le bouton "Arrêter".
Ma séquence est gérée par l'objet en question, qui lui même crée d'autres objets en interne.
Et ce que je veux c'est détruire l'objet lorsque l'utilisateur clique sur "Arrêter" car l'objet
consomme tout un tas de ressources, comme par exemple: Connexion a une BDD, il instancie tout un tas d'objets COM,...
|
|
vendredi 2 décembre 2005 à 14:06:21 |
Re : Détruire explicitement un objet

Nikoui
|
Réponse acceptée !
Met le code de libération dans ton destructeur, comme en C++.
Lorsque le destructeur sera appelé - et il sera forcément appelé - les ressources seront libérées.
La seule différence avec le C++, je le répète, c'est que tu ne maitrise pas quand sera appelé le destructeur.
Si tu veux absolument libérer tes ressources sur un click de bouton, il
faut le faire explicitement en appelant une de tes méthodes.Si tu ne le
fait pas, les ressources seront libérée par le GC, un peu après le
click sur le bouton, ou bien à la fermeture de ton application, ou bien
même plus tard, mais elles le seront.
|
|
vendredi 2 décembre 2005 à 14:17:01 |
Re : Détruire explicitement un objet

0xYg3n3
|
Ok, ce que je vais faire, c'est mettre dans une méthode que je pourrais appeller
le contenu actuel du destructeur. C'est une bonne solution.
Merci a toi, et aux autres.
|
|
vendredi 2 décembre 2005 à 14:30:06 |
Re : Détruire explicitement un objet

TheSaib
|
Ne pas oublier de surcharger le Finalize si tu as surcharge le dispose.
|
|
Cette discussion est classée dans : créer, objet, delete, détruire, explicitement
Répondre à ce message
Sujets en rapport avec ce message
gestion de sessions [ par engelho ]
Bonjour, Depuis quelques jours, j'apprends a me servir des sessions (et j'adore ça), mais toutes les infos que je trouve portent sur les variables
Objet dynamique [ par scottmat ]
Bonjours à tous & à toutes, J'ai créer dynamiquement des objets <
Nom de la Classe Application [ par nico_fip1 ]
Bonjour à tous,Je suis un ancien de C++ 6.0, et je passe maintenant à C#.NetMa question est la suivante :Je souhaite créer un objet (instance d'une cl
Créer un objet pouvant tout recevoir par casting [ par Bubuss ]
Voilà je voudrai créer un objet pouvant recevoir par casting n'importe quel objet comment faire ?
Créer un objet graphique [ par cheragasalhi ]
Bonjour,J'ai une classe A par exemple classe Ordinateur et je veux présenter ma classe graphiquement "afficher un ordinateur" ma question comment asso
Checkedlistbox affichage [ par rours ]
Bonjour.Pour simplifier on va schématiser ainsi : J'ai 2 class : class Astring nom;List b;et class BString nomB;int intB;Je rempli une checkedlistbox
instancier un objet d'une classe fille [ par suethi75 ]
Bonjour,Je voudrais instancier un objet d'une classe fille. Oui, comme vous avez pu le comprendre j'ai un héritage.J'utilise le constructeur de la cla
probleme pour créer un fichier XML [ par suethi75 ]
Bonsoir, Je voudrais savoir comment fait on en C# pour créer un fichier xml comme cela: </d
impression C# [ par omar_mostefai ]
je developpe en C#.NET et j'ai un petit problème: pour l'impression j'utilise report et mon problème lorsque je depose un objet textbox je ne peut acc
créer une procédure qui retourne control pointé par la souris [ par cheragasalhi ]
<link rel="Fi
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOURTECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOUR par ROMELARD Fabrice
Après un retour sur l'histoire des TechDays de Paris et le fait que ce soit le plus gros event MS au monde (du fait de sa gratuité), le président de MS France (Eric Boustoullier) a fait une présentation de la vision Microsoft pour les années à venir...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|