589 votes

Quand est-il opportun d'utiliser des classes partielles en C# ?

Je me demandais si quelqu'un pouvait me donner un aperçu de la raison pour laquelle je les utiliserais et des avantages que j'en tirerais.

0 votes

466voto

JaredPar Points 333733

La principale utilité des classes partielles est de faciliter la vie des générateurs de code et des concepteurs. Les classes partielles permettent au générateur d'émettre simplement le code dont il a besoin, sans avoir à s'occuper des modifications apportées au fichier par l'utilisateur. Les utilisateurs sont également libres d'annoter la classe avec de nouveaux membres en ayant une deuxième classe partielle. Cela fournit un cadre très propre pour la séparation des préoccupations.

Une meilleure façon de voir les choses est de voir comment les concepteurs fonctionnaient avant les classes partielles. Le concepteur de WinForms recrachait tout le code à l'intérieur d'une région avec des commentaires fortement formulés sur la nécessité de ne pas modifier le code. Il devait insérer toutes sortes d'heuristiques pour trouver le code généré en vue d'un traitement ultérieur. Désormais, il suffit d'ouvrir le fichier designer.cs pour avoir la certitude qu'il ne contient que du code pertinent pour le concepteur.

8 votes

Je dirais même que c'est la seule utilisation des classes partielles dans un code de production. Bien que j'admette que cela puisse être utile pour le remaniement.

6 votes

@Gordon, c'est aussi très pratique pour permettre à une classe imbriquée d'être contenue dans un fichier de code séparé.

6 votes

@Gordon -- La réponse de HumerGu est une autre qui me semble assez difficile à contester. Les classes partielles peuvent être très pratiques pour implémenter des interfaces en C#, et garder les membres de l'interface clairement séparés des membres de la classe : stackoverflow.com/questions/3601901/why-use-partial-classes/

310voto

HumerGu Points 868

Une autre utilisation consiste à diviser la mise en œuvre de différentes interfaces, par exemple

partial class MyClass : IF3
{
    // main implementation of MyClass
}

partial class MyClass : IF1
{
    // implementation of IF1
}

partial class MyClass : IF2
{
    // implementation of IF2
}

7 votes

C'est un bon point ! C'est quelque chose que j'ai déjà fait et que j'ai oublié, mais c'est certainement une bonne façon de garder les membres de l'interface clairement visibles (surtout en C#, puisque VB.NET utilise la fonction Implements pour indiquer qu'une méthode appartient à une interface)

4 votes

Très bon point, chacune des interfaces peut être mise en œuvre par un développeur. c'est un bon moyen de trouver facilement l'implémentation de l'interface.

3 votes

Comment savoir lequel est pour IF1, ou IF2 par l'ordre de déclaration des classes ?

195voto

STW Points 15326

Outre les autres réponses...

Je les ai trouvés utiles comme tremplin pour la refonte des classes de parrains. Si une classe a plusieurs responsabilités (en particulier s'il s'agit d'un très gros fichier de code), je trouve bénéfique d'ajouter 1x classe partielle par responsabilité comme première étape de l'organisation et de la refonte du code.

Cela est très utile car cela permet de rendre le code beaucoup plus lisible sans pour autant affecter le comportement de l'exécution. Elle permet également de déterminer si une responsabilité est facile à remanier ou si elle est étroitement liée à d'autres aspects.

Cependant, pour être clair, il s'agit toujours d'un mauvais code, à la fin du développement, vous voulez toujours une responsabilité par classe ( PAS par classe partielle). Ce n'est qu'un tremplin :)

2 votes

Pour moi, ce n'est pas un bon style de codage, mais il peut améliorer l'apparence de mauvais codes.

1 votes

Je suis tout à fait d'accord. C'est un bon point de départ pour corriger un mauvais code. Une bonne classe est une bonne classe, qu'elle soit répartie dans plusieurs fichiers ou non.

92voto

hellowahab Points 50
  1. Développeur multiple L'utilisation de classes partielles permet à plusieurs développeurs de travailler sur la même classe. facilement.
  2. Générateur de code Les classes partielles sont principalement utilisées par les générateurs de code pour conserver les éléments suivants séparer les différentes préoccupations
  3. Méthodes partielles En utilisant les classes partielles, vous pouvez également définir des méthodes partielles, où un développeur peut simplement définir la méthode et l'autre développeur peut l'implémenter.
  4. Déclaration de méthode partielle uniquement Même le code est compilé avec la seule déclaration de méthode et si l'implémentation de la méthode n'est pas présente, le compilateur peut sans risque supprimer ce morceau de de code et aucune erreur de compilation ne se produira.

    Pour vérifier le point 4. Il suffit de créer un projet winform et d'inclure cette ligne après le Constructeur Form1 et d'essayer de compiler le code

    partial void Ontest(string s);

Voici quelques points à prendre en compte lors de l'implémentation des classes partielles:-

  1. Utiliser le mot-clé partiel dans chaque partie de la classe partielle.
  2. Le nom de chaque partie de la classe partielle doit être le même, mais le nom du fichier source de chaque partie de la classe partielle peut être différent.
  3. Toutes les parties d'une classe partielle doivent se trouver dans le même espace de noms.
  4. Chaque partie d'une classe partielle doit se trouver dans la même assembly ou DLL. En d'autres termes, vous ne pouvez pas créer une classe partielle dans des fichiers sources provenant d'un projet de bibliothèque de classes différent.
  5. Chaque partie d'une classe partielle doit avoir la même accessibilité. (c'est-à-dire : privée, publique ou protégée).
  6. Si vous héritez d'une classe ou d'une interface sur une classe partielle, elle est héritée par toutes les parties de cette classe partielle.
  7. Si une partie d'une classe partielle est scellée, alors la classe entière sera scellée.
  8. Si une partie d'une classe partielle est abstraite, la classe entière sera considérée comme une classe abstraite.

1 votes

Y a-t-il un problème pour éditer une classe partielle créée à partir d'Entity Framework ? Je souhaite modifier le nom de certaines classes créées à partir d'une table.

0 votes

J'ai les mêmes préoccupations. Je veux connaître les avantages éventuels d'une classe partielle lors de la construction de modèles qu'Entity Framework utilisera essentiellement pour construire ma base de données du point de vue de l'approche, de la mise en œuvre et du code d'abord... etc.

0 votes

@JimBalter Veuillez cliquer sur ce lien msdn.microsoft.com/en-us/library/6b0scde8(v=vs.110).aspx . Cela signifie que s'il n'y a pas d'implémentation présente, le compilateur supprimera le morceau de code et aucune erreur de compilation ne sera reçue.

59voto

Justin Niessner Points 144953

L'une des applications les plus intéressantes est la séparation du code généré et du code écrit à la main qui appartiennent à la même classe.

Par exemple, comme LINQ to SQL utilise des classes partielles, vous pouvez écrire votre propre implémentation de certains éléments de fonctionnalité (comme les relations Many-to-Many) et ces éléments de code personnalisé ne seront pas écrasés lorsque vous re-générerez le code.

Il en va de même pour le code WinForms. Tout le code généré par le concepteur est placé dans un fichier auquel vous ne touchez généralement pas. Votre code écrit à la main se trouve dans un autre fichier. Ainsi, lorsque vous modifiez quelque chose dans Designer, vos modifications ne sont pas effacées.

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