2010-02-10 3 views
0

L'une des règles de mise en oeuvre méthode Dispose Says:.La mise en œuvre modèle à usage unique correctement - propriétés implémentées automatiquement

« Considérée comme une ObjectDisposedException de méthodes d'instance sur ce type (autre que Éliminez) lorsque les ressources sont déjà éliminés cette règle ne ne s'applique pas à la méthode Dispose car elle devrait être appelable plusieurs fois sans émettre d'exception. "

Voir: http://msdn.microsoft.com/en-us/library/b1yfkh5e.aspx

Est-ce que cela signifie, que si je veux mettre en œuvre des propriétés correctement, je ne peux pas utiliser les propriétés implémentées automatiquement? Ai-je besoin de propriétés pour l'implémenter comme celle-ci?

private bool _property; 
    public bool Property 
    { 
     get 
     { 
      if(disposed) throw new ObjectDisposedException ("MyClass"); 
      return _property; 
     } 
     set 
     { 
      if(disposed) throw new ObjectDisposedException ("MyClass"); 
      _property=value; 
     } 
    } 

Répondre

2

En général, les propriétés doivent agir comme des champs (calcul peu ou pas, retourner la même valeur sur plusieurs appels si aucun autre état a changé), de sorte qu'ils ne ont pas besoin du contrôle complet de disposer, mais vous devez mettre vérifie les méthodes publiques définies dans votre classe.

+0

Je suis d'accord. Lorsque vous ne faites que renvoyer des valeurs primitives, telles que des nombres entiers, des booléens et des couleurs, ne prenez pas la peine de procéder à une vérification complète. Toutefois, lorsque cette propriété renvoie un objet qui ne peut raisonnablement pas être utilisé après son élimination, effectuez une vérification complète. – Steven

1

Cela dépend. L'appel d'un objet disposé est une condition de contour, donc vous ne voudrez généralement pas sacrifier l'efficacité de votre objet lors d'une utilisation régulière en ajoutant tous ces tests. La bonne façon de lire la règle est:

Si vous appelez une méthode disposée sur un Disposé causerait une exception ou avoir des conséquences indésirables, jetez un ObjectDisposedException

Par ex Si la méthode Dispose de votre classe définit un champ à null, vous devez lancer un ObjectDisposedException à partir des méthodes/propriétés utilisant ce champ au lieu d'échouer avec un NullReferenceException.

Questions connexes