Question Quand est-il approprié d'utiliser des classes partielles C #?


Je me demandais si quelqu'un pouvait me donner un aperçu des raisons pour lesquelles je les utiliserais et de l'avantage que j'y gagnerais.


413
2017-08-30 15:38


origine


Réponses:


La plus grande utilisation des classes partielles est de faciliter la vie des générateurs / concepteurs de code. Les classes partielles permettent au générateur d'omettre simplement le code dont il a besoin d'omettre et de ne pas avoir à gérer les modifications utilisateur apportées au fichier. 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 est de voir comment les concepteurs ont fonctionné avant les classes partielles. Le concepteur de WinForm cracherait tout le code à l’intérieur d’une région avec des commentaires très fermes sur le fait de ne pas modifier le code. Il fallait insérer toutes sortes d'heuristiques pour trouver le code généré pour un traitement ultérieur. Maintenant, il peut simplement ouvrir le fichier designer.cs et avoir une grande confiance dans le fait qu'il ne contient que du code pertinent pour le concepteur.


354
2017-08-30 15:40



Une autre utilisation consiste à diviser l'implémentation de différentes interfaces, par exemple:

partial class MyClass : IF1, IF2, IF3
{
    // main implementation of MyClass
}


partial class MyClass
{
    // implementation of IF1
}

partial class MyClass
{
    // implementation of IF2
}

214
2017-08-30 17:46



Mis à part les autres réponses ...

Je les ai trouvés utiles comme tremplin dans la refactorisation des classes divines. Si une classe a plusieurs responsabilités (surtout s'il s'agit d'un très gros fichier de code), je trouve qu'il est avantageux d'ajouter une classe partielle par responsabilité en tant que premier passage pour l'organisation puis le refactoring du code.

Cela aide grandement car il peut aider à rendre le code beaucoup plus lisible sans affecter le comportement d'exécution. Cela peut également aider à identifier quand une responsabilité est facile à restructurer ou est étroitement liée à d'autres aspects.

Cependant - pour être clair - il s’agit toujours d’un code erroné, à la fin du développement, vous voulez quand même une responsabilité par classe (NE PAS par classe partielle). C'est juste un tremplin :)


134
2017-08-30 15:48



  1. Développeur multiple Utilisation de classes partielles plusieurs développeurs peuvent travailler sur la même classe facilement.
  2. Générateur de code Les classes partielles sont principalement utilisées par le générateur de code pour garder différentes préoccupations distinctes
  3. Méthodes partielles En utilisant des 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 seulement Même le code est compilé avec la déclaration de méthode seulement et si l'implémentation de la méthode n'est pas présent compilateur peut retirer en toute sécurité ce morceau de code et aucune erreur de compilation se produira.

    Pour vérifier le point 4. Créez simplement un projet winform et incluez cette ligne après le constructeur Form1 et essayez de compiler le code

    partial void Ontest(string s);
    

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

  1. Utilisez un mot clé partiel dans chaque partie de la classe partielle.
  2. Le nom de chaque partie de la classe partielle doit être identique, mais le nom du fichier source pour chaque partie de la classe partielle peut être différent.
  3. Toutes les parties d'une classe partielle doivent être dans le même espace de noms.
  4. Chaque partie d'une classe partielle doit être dans le même assembly ou DLL, en d'autres termes, vous ne pouvez pas créer une classe partielle dans les fichiers source 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é, public ou protégé)
  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, la classe entière sera scellée.
  8. Si une partie de la classe partielle est abstraite, la classe entière sera considérée comme une classe abstraite.

65
2018-05-27 11:12



Une bonne utilisation consiste à séparer le code généré du code manuscrit appartenant à la même classe.

Par exemple, comme LINQ to SQL utilise des classes partielles, vous pouvez écrire votre propre implémentation de certaines fonctionnalités (comme les relations plusieurs-à-plusieurs) et ces parties de code personnalisé ne seront pas écrasées lorsque vous recréerez le code.

La même chose vaut pour le code WinForms. Tout le code généré par Designer apparaît dans un fichier que vous ne touchez généralement pas. Votre code écrit à la main va dans un autre fichier. Ainsi, lorsque vous modifiez quelque chose dans Designer, vos modifications ne sont pas effacées.


52
2017-08-30 15:40



Il est vrai que la classe partielle est utilisée dans la génération automatique de code, une utilisation peut être la maintenance d'un fichier de grande classe pouvant contenir mille lignes de code. Vous ne savez jamais que votre classe pourrait se retrouver avec 10 000 lignes et vous ne voulez pas créer une nouvelle classe avec un nom différent.

public partial class Product
{
    // 50 business logic embedded in methods and properties..
}

public partial class Product
{
    // another 50 business logic embedded in methods and properties..
}
//finally compile with product.class file.

Une autre utilisation possible pourrait être que plus d'un développeur peut travailler sur la même classe car ils sont stockés à différents endroits. Les gens peuvent rire, mais on ne sait jamais que ça peut être une poignée parfois.

Product1.cs

public partial class Product
{
    //you are writing the business logic for fast moving product
}

Product2.cs

public partial class Product
{
    // Another developer writing some business logic...
}

J'espère que cela a du sens!


19
2017-09-13 01:48



gardez tout aussi propre que possible lorsque vous travaillez avec des classes énormes, ou lorsque vous travaillez en équipe, vous pouvez éditer sans modifier (ou toujours valider les modifications)


12
2017-08-30 16:25



L'utilisation principale pour les classes partielles est avec le code généré. Si vous consultez le réseau WPF (Windows Presentation Foundation), vous définissez votre interface utilisateur avec le balisage (XML). Ce balisage est compilé en classes partielles. Vous remplissez le code avec des classes partielles de votre choix.


10
2017-08-30 15:40



Les classes partielles couvrent plusieurs fichiers.

How can you use the partial modifier on a C# class declaration?

Avec partiel, vous pouvez physiquement séparer une classe en plusieurs fichiers.

Cela se fait souvent par des générateurs de code.

Exemple

Avec les classes C # normales, vous ne pouvez pas déclarer une classe dans deux fichiers distincts dans le même projet.

Mais avec le modificateur partiel, vous pouvez.

Ceci est utile si un fichier est couramment édité et l'autre est généré par une machine ou rarement modifié.

An Example will clear your concept.

class Program
{
    static void Main()
    {
    A.A1();
    A.A2();
    }
}

//Contents of file A1.cs: C#

using System;

partial class A
{
    public static void A1()
    {
    Console.WriteLine("A1");
    }
}

//Contents of file A2.cs: C#

using System;

partial class A
{
    public static void A2()
    {
    Console.WriteLine("A2");
    }
}

Output

A1
A2

Partiel est requis ici.

If you remove the partial modifier, you will get an error containing this text: [The namespace '<global namespace>' already contains a definition for 'A'].

Pointe: Pour résoudre ce problème, vous pouvez utiliser le mot clé partial ou modifier l'un des noms de classe.

How does the C# compiler deal with partial classes?

Si vous démontez le programme ci-dessus, vous verrez que les fichiers A1.cs et A2.cs sont éliminés.

Vous constaterez que la classe A est présente.

IL Disassembler Alors: La classe A contiendra les méthodes A1 et A2 dans le même bloc de code. Les deux classes ont été fusionnées en une seule.

Résultat compilé de A1.cs et A2.cs: C #

internal class A
{
    // Methods
    public static void A1()
    {
    Console.WriteLine("A1");
    }

    public static void A2()
    {
    Console.WriteLine("A2");
    }
}

Résumé

Les classes partielles peuvent simplifier certaines situations de programmation C #.

Ils sont souvent utilisés dans Visual Studio lors de la création de programmes Windows Forms / WPF.

Le code C # généré par la machine est séparé.

Ou vous pourriez trouver l'ensemble Description ici .


10
2018-06-20 07:33