42 votes

Classe partielle vs méthode d'extension

Je n'ai pas beaucoup d'expérience de l'utilisation de ces 2 façons d'étendre une classe ou créer des méthodes d'extension à l'encontre d'une classe. En regardant les autres travailler, j'ai une question ici.

J'ai vu des gens à l'aide d'un parital classe d'étendre une classe d'entité dans un projet. Pendant ce temps, dans le même projet, il y a un autre dossier contenant beaucoup de méthodes d'extension pour la classe d'entité.

Est-il en droit de le faire? Je veux dire que ces 2 façons les deux fonctionnent très bien. Pourriez-vous me donner quelques la pratique réelle, la façon de choisir l'un d'eux quand je veux étendre une classe?

41voto

Jaimal Chohan Points 4748

Certaines des différences qui permettra de déterminer si vous souhaitez utiliser une Classe Partielle ou une Méthode d'Extension sont

Classe Partielle

  • Ne fonctionne que contre les classes dans le même projet/de l'assemblée
  • Classe cible doit être marqué en tant que partielle
  • A accès à la Cible de la classe de champs et des membres protégés
  • La cible doit être une implémentation de la classe

Méthode D'Extension

  • Peut être appliquée à l'encontre de classes dans d'autres assemble
  • Doit être statique, n'a accès qu'à la Cible le public et les membres des classes
  • La cible de l'extension peuvent être un type de béton, ou d'un type abstrait ou de l'interface

25voto

Oded Points 271275

Classes partielles doivent être utilisés dans le code de génération de scénarios.

Depuis le fichier généré peut être écrasé à tout moment, on utilise des classes partielles d'écrire dans le non-fichier généré.

En outre, les partiels ne fonctionnent que si elles font partie de la même assemblée - ils ne peuvent pas traverser assemblée limites.

Si ce ne sont pas vos contraintes, vous pouvez et devez utiliser des méthodes d'extension - bien sûr, après avoir examiné d'autres possibilités, telles que l'héritage et la composition de l'aptitude.

3voto

Ron Newcomb Points 11

Vous pouvez utiliser des méthodes d'extension sur une instance NULL mais pas des méthodes d'instance (de classes partielles ou autres). C'est une conséquence du fait que les méthodes d'extension sont en fait statiques.

2voto

lance Points 6325

J'utilise des méthodes partielles lorsque j'ai besoin d'une classe pour implémenter une interface, mais le code de classe est généré automatiquement (VS utilise des classes partielles pour générer du code pour les services Web et les modèles EF).

J'utilise des méthodes d'extension lorsque la nouvelle méthode que j'ajoute au type est appropriée pour n'importe quelle valeur de ce type. (bons exemples: int.IsEven (), string.IsEmpty (); mauvais exemples: int.IsOldEnoughToDrive (), string.IsLastName ()).

2voto

ArsenMkrt Points 24447

Partielle ne fonctionne que si les deux fichiers sont dans le même projet, et vous pouvez accéder aux membres privés et protégés de la classe.

Les méthodes d'Extension sont juste des méthodes statiques, et ne pouvez pas accéder aux membres privés.

Donc, si vous voulez accéder aux membres privés et protégés, la seule façon que vous avez est partielle, si non, la réponse à la question de savoir si la méthode que vous souhaitez ajouter d'être visible partout où vous voulez utiliser la classe? si oui, l'utilisation partielle, si non, c'est une sorte d'extension, utiliser des méthodes d'extension.

Par ailleurs, si la première classe n'est pas généré par un outil, vous pouvez écrire votre fonction à l'exception de l'utilisation partielle ;)

espérons que cette aide

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X