Pourquoi n'est pas HashAlgorithm.Dispose
public? Je comprends qu'il s'agit d'une implémentation d'interface explicite et que vous pouvez toujours l'appeler. J'essaie de comprendre le raisonnement derrière cela.Pourquoi HashAlgorithm.Dispose n'est-il pas public?
0
A
Répondre
1
Ceci est appelé explicit interface implementation. La seule façon d'appeler cette méthode consiste à convertir un objet en IDisposable
. Un bon exemple de quand cela pourrait être utile est quand vous avez une classe qui implémente deux interfaces qui ont toutes deux le même nom de méthode et que vous voulez fournir une implémentation différente pour chacune d'entre elles.
Je comprends cela. Essayer de déterminer quel est le raisonnement derrière. Je n'ai jamais vu une implémentation explicite d'IDisposable. Question éditée à clarifier. – Simon
Bien que je ne connaisse pas la raison de l'implémentation explicite de l'interface 'IDisposable' dans la classe' HashAlgorithm', je peux dire que c'est une pratique ** BAD **. Bien que le bloc using fonctionne avec les classes qui ont une implémentation explicite 'IDisposable', les développeurs qui explorent le modèle objet peuvent ne pas remarquer que l'objet possède une méthode' Dispose' et ne peut donc pas profiter du nettoyage initial. –
@DarinDimitrov: L'implémentation explicite de 'IDisposable' est bonne dans les cas où l'implémentation ne fera rien et la classe veut annoncer qu'il n'est pas nécessaire de l'appeler sur des choses connues pour être de son type particulier. Je dirais que la bonne façon d'implémenter une telle méthode de ne rien faire serait d'implémenter explicitement une méthode vide; Une implémentation explicite n'est pas appropriée si la méthode 'Dispose' est chaînée comme indiqué ci-dessus, mais certaines stratégies de codage peuvent exiger que toutes les implémentations éliminées se chaînent comme indiqué. – supercat