J'ai une classe qui implémente UserControl. Dans .NET 2005, une méthode Dispose est automatiquement créée dans le fichier de classe partielle MyClass.Designer.cs qui se présente comme suit:
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
Si je veux ajouter ma propre fonctionnalité Dispose, où la placerais-je? Puisque ce fichier est généré, je ne veux pas ajouter de code ici et risquer de s’envoler.
Dans un tel cas, je déplace la méthode Dispose
générée vers le fichier principal et l’étend. Visual Studio respecte cela.
Une autre approche consisterait à utiliser une méthode partielle (C # 3.0).
Toutes les classes Component
implémentent un événement Disposed
. Vous pouvez ajouter un gestionnaire d'événements pour cet événement et nettoyer les éléments qu'il contient.
Par exemple, dans votre UserControl
, vous pouvez ajouter la méthode suivante:
private void OnDispose(object sender, EventArgs e)
{
// do stuff on dispose
}
Et dans le constructeur (ou dans le gestionnaire d'événements Load
), ajoutez la ligne suivante:
Disposed += OnDispose;
Je crois que dans ce cas, le générateur de code respecte votre code. Il devrait être prudent de le mettre dans le code ci-dessous.
Dans VS 2005 (et 2008), vous pouvez mettre à jour la méthode Dispose
. Elle ne sera pas supprimée lorsque vous modifierez le contrôle à partir du concepteur.
Il vous suffit de surcharger la méthode publique Void Dispose () dans la classe de composant dont le contrôle utilisateur a hérité.
assurez-vous de passer l'appel à la méthode de base et de disposer de votre fonction de manière fonctionnelle, sinon vous casserez la fonctionnalité si vous ne la mettez pas complètement en œuvre
Vous pouvez le déplacer du fichier .designer.cs vers le fichier .cs principal si vous le souhaitez. Comme cela a déjà été dit, il ne sera pas écrasé.
Je pense que le moyen le plus propre serait de demander à votre contrôle de s'abonner à son propre événement Disposed () et de le nettoyer.