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?
- Gris Vous dire un modèle de conception ou de fonctionnalité du langage c#
- C'est un modèle de conception. La Composition n'est pas une "langue de fonction en C#", ou dans toute autre langue que je connais.
- Cody Gris du commentaire est une pure assertion dogmatique qui n'est pas raisonnée et ne peut pas être. Partielle des classes/méthodes et les méthodes d'extension servir à différentes fins et ouvrir totalement différentes possibilités. La Composition n'a rien à voir avec elle et est un troisième concept avec sa propre pro/cons.
Vous devez vous connecter pour publier un commentaire.
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
Méthode D'Extension
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.
Vous pouvez utiliser des méthodes d'extension sur une instance NULL, mais pas les méthodes d'instance (de classes partielles ou autre). C'est une conséquence de l'extension de méthodes sont statiques.
- Je utiliser des méthodes partielles quand j'ai besoin d'une classe implémente une interface, mais le code de la classe est générée automatiquement (VS utilise des classes partielles pour générer le code pour les services web et EF modèles).
Je utiliser des méthodes d'extension lorsque la nouvelle méthode que je suis en ajoutant le type est approprié pour tout valeur de ce type. (de bons exemples: int.IsEven(), string.IsEmpty(); mauvais exemples: int.IsOldEnoughToDrive(), string.IsLastName()).
vous pouvez utiliser des classes partielles dans un projet, vous êtes en développement, tandis que les méthodes d'extension pourrait également être utilisée pour étendre les projets que vous n'avez pas le code source de trop..
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ère que cette aide
Si vous choisissez la Classe Partielle route, mais ne trouvez-vous répéter le même code, passer à des Méthodes d'Extension.
Par exemple, j'ai beaucoup de classes générées avec des méthodes qui renvoient des
IEnumerable<Track>
de données. Je veux prolonger la durée de chaque classe, en quelque sorte, de me donner la possibilité de recevoir les données dans le formatIEnumerable<MediaItem>
.J'ai une exigence générale d'ici à transformer
IEnumerable<Track>
données àIEnumerable<MediaItem>
. Dans ce cas, plutôt que de l'écriture de plusieurspartial class
méthodes une méthode d'extension qui fonctionne le mieux:Cela me donne l'une des options suivantes:
Une classe partielle est utile lorsque vous souhaitez étendre une classe générée. De cette façon, vous pouvez écrire votre code dans un seul fichier, et puis, quand/si l'autre partie de votre classe doit être re-généré, il peut être fait en toute sécurité, en tant que fichier de code n'a pas changé.
diviser la définition d'une classe ou d'une structure, ou d'une interface de plus de deux ou plusieurs fichiers source
Les méthodes d'Extension vous permettent de "ajouter" méthodes existantes sans création d'un nouveau type dérivé, recompiler, ou de modifier le type d'origine