Quels sont les avantages à utiliser une classe partielle, par opposition à un résumé d'une?

StackOverflow https://stackoverflow.com/questions/1057851

Question

Je lis la programmation Microsoft® Visual C # ® 2008: La langue pour obtenir une meilleure compréhension de C # et ce qui peut être fait avec elle. Je suis tombé sur des classes partielles que j'avais déjà rencontrés de la classe Page de ASP.Net.

Pour moi, il semble que vous pouvez faire ce que les classes partielles font avec une classe abstraite et une une surchargée. Il est évident qu'une équipe sera dans le contrôle de l'interface via les méthodes abstraites mais vous appuierez sur l'autre de toute façon. Et si l'objectif est une collaboration est donc pas que ce contrôle de code source et d'autres outils résolvent.

Je manque juste le point à une classe partielle. Aussi quelqu'un pourrait fournir une utilisation réelle du monde.

Était-ce utile?

La solution

Les classes partielles ont rien à voir avec l'héritage de l'objet. Les classes partielles sont juste une façon de diviser le code source qui définit une classe dans des fichiers séparés (ce qui est par exemple fait lorsque vous créez un nouveau formulaire dans votre application Windows Forms - un fichier est le code « votre », un autre fichier .designer.cs contient le code qui gère VS2008 pour vous).

Autres conseils

Un bon exemple d'utilisation est quand un côté de la classe partielle est générée (tel qu'un ORM)

La grande chose au sujet d'une classe partielle est que vous pouvez prendre une classe existante et ajouter à elle. Maintenant, cela ressemble beaucoup à l'héritage, mais il y a beaucoup de choses que l'héritage ne peut faire que les classes partielles.

est ici penser sur les classes LINQ to SQL généré pour vous. Ils sont générées automatiquement qui signifie que vous ne devriez pas les modifier. Sans une classe partielle, vous ne pouvez pas joindre une interface. Vous pouvez créer une nouvelle classe et d'en tirer que de la Linq à la classe sql, mais cela ne vraiment obtenir rien parce que vous ne pouvez pas transtyper LINQ à la classe sql à votre classe avec l'interface.

Les classes partielles doivent être limités à l'utilisation avec le code généré automatiquement, où ne peut pas être modifié l'autre code. En utilisant comme un substitut à l'héritage ou l'ajout de fonctionnalités ne sont pas les meilleures pratiques.

Si vous avez une grande classe, son déjà mauvaise. Code devrait être remaniée plusieurs classes « réelles » au lieu de plusieurs fichiers. Grandes classes en général signifie que la classe est en train de faire trop de choses et constitue une violation SRP (responsabilité unique Principe).

classe partielle sont maintenant utilisés massivement dans ASP.Net pour permettre deux fichiers source la marge en fonction example.aspx et le code example.aspx.cs à base de telle sorte que les méthodes et les variables définies dans chacun sont visibles à chacun. dans le example.aspx

<custom:exampleControl id="exampleCntr" property="<%#getProperty()%>" />

dans les example.aspx.cs

private object GetProperty(){ // called from aspx
    return DateTime.Now;
}

private void DoStuff(){
    ExampleControl c = exampleCntr; //exampleCntr is defined in aspx.
}

La nature bidirectionnelle de cela ne peut pas être recréée avec des classes abstraites.

Il semble que votre question est ce que la différence entre

partial class Foo
{
  PART ONE
}
partial class Foo
{
  PART TWO
}

et

astract class FooBase
{
  PART ONE
}
partial class Foo : FooBase
{
  PART TWO
}

Même si elles peuvent sembler un peu similaire, et dans certains cas, cette dernière construction pourrait être utilisé à la place de l'ancien, il y a au moins deux problèmes avec le style celui-ci:

-1- Le type aurait probablement FooBase de connaître l'identité du type de béton qui était censé en tirer, et toujours utiliser des variables de ce type, plutôt que du type Foo. Cela représente un couplage inconfortablement-étroite entre les deux types.

-2- Si le type est public internal, le type devra this être aussi public. Même si tous les constructeurs de sont <=> <=>, il serait possible pour le code en dehors de définir des classes qui dérivent de mais pas <=> <=>; la construction d'instances de ces classes serait difficile, mais pas impossible.

S'il était possible pour un type dérivé d'élargir la visibilité d'un type de base, ces questions ne seraient pas trop problématique; on considérer comme un identifiant <=> « jetable » qui apparaît exactement deux fois: une fois dans sa déclaration, et une fois sur la ligne de déclaration pour <=>, et que chaque figure serait un <=> <=> déguisé. Le fait que ne pouvait pas utiliser <=> membres d'instance <=> sur un transtypage sans <=> pourrait être pénible, mais pourrait aussi favoriser une bonne répartition de code. Comme il est impossible d'accroître la visibilité d'un type de base, cependant, la conception abstraite de la classe semble dégueu.

But des classes partielles est de permettre la définition d'une classe pour enjamber plusieurs fichiers. Cela peut permettre une meilleure maintenabilité et la séparation de votre code.

Nous utilisons des classes partielles pour diviser nos grandes classes. De cette façon, il est plus facile de vérifier une partie du code avec Sourcesafe. Cela limite les cas où quatre développeurs ont besoin pour accéder au même fichier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top