2009-10-14 6 views
4

Je suis en train de nettoyer des mises en garde dans mon projet C#, et j'ai deux ou trois d'entre eux en disant:Composants System.ComponentModel.IContainer non utilisés?

Warning 1 The field 'Namespace.Class.components' is assigned but its value is 
never used E:\WorkspacePath\Sources\Project\WorkItems\Class.designer.cs 

Si je regarde dans le code, je peux trouver:

/// <summary> 
/// Required designer variable. 
/// </summary> 
private System.ComponentModel.IContainer components = null; 

J'ai lu que c'est effectivement utilisé par le concepteur, mais il ne semble pas l'utiliser du tout. J'aurais supprimé cette ligne tout de suite si ce n'était pas pour le commentaire. Commentant que la ligne ne semblait pas changer le comportement du concepteur, je pouvais toujours ouvrir ma vue de menu sans aucun problème. Donc, ma question est, est-il sécuritaire de supprimer cette ligne quand j'ai l'avertissement au moment de la compilation, ou cet avertissement est plutôt "normal"? Que devrais-je faire avec? Est-ce que j'oublie de faire quelque chose avec ce composant?

Merci pour votre aide,

Répondre

4

Il est généralement pas une bonne idée de modifier le code manuellement dans le fichier de concepteur, comme le concepteur pourrait se confondre et entraîner des comportements inattendus. Il peut ne pas être utilisé pour le moment, mais certains contrôles (comme l'imagiste) prennent cet IContainer comme une dépendance.

La raison pour laquelle vous obtenez les avertissements du compilateur est probablement parce que vous ne disposez pas du remplacement standard de la méthode Dispose généré, ce qui empêcherait l'avertissement. Le voici:

/// <summary> 
    /// Clean up any resources being used. 
    /// </summary> 
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> 
    protected override void Dispose(bool disposing) 
    { 
     if (disposing && (components != null)) 
     { 
      components.Dispose(); 
     } 
     base.Dispose(disposing); 
    } 
+0

Ceci réussit à supprimer l'avertissement, mais suis-je censé le remplacer? Je ne suis pas en train d'implémenter IDisposable, donc cette méthode Dispose doit être héritée d'un droit de classe basique (donc l'instruction override dans la solution proposée). Je vais corriger les classes avec cette solution, mais je ne comprends toujours pas pourquoi nous sommes censés le faire manuellement ou pourquoi le code généré crée des avertissements. – srodriguez

+0

Quel type de composant est-ce? Tout ce dont hérite votre composant (par exemple Form, UserControl, etc.) implémente IDisposable. Créer un nouveau composant à partir de zéro devrait sûrement générer ce code. Pouvez-vous confirmer cela? – jancow