55 votes

Interface partielle en C#

Est-ce que C# autorise les interfaces partielles? c'est-à-dire, dans la classe ManagerFactory1.cs, j'ai

public partial interface IManagerFactory
{
    // Méthodes Get
    ITescoManager GetTescoManager();
    ITescoManager GetTescoManager(INHibernateSession session);
}

et dans la classe ManagerFactory.cs, j'ai:

public partial interface IManagerFactory
{
    // Méthodes Get
    IEmployeeManager GetEmployeeManager();
    IEmployeeManager GetEmployeeManager(INHibernateSession session);
    IProductManager GetProductManager();
    IProductManager GetProductManager(INHibernateSession session);
    IStoreManager GetStoreManager();
    IStoreManager GetStoreManager(INHibernateSession session);
}

Les classes ManagerFactory et ManagerFactory1 sont situées dans la même assembly.

84voto

Jon Skeet Points 692016

La manière la plus simple est simplement d'essayer :)

Mais oui, les interfaces partielles sont autorisées.

Emplacements valides pour le modificateur partial (avec références spécifiques C# 3.0) :

  • Classes (10.1.2)
  • Structures (11.1.2)
  • Interfaces (13.1.2)
  • Méthodes (C# 3.0+) (10.2.7 ; 10.6.8)

La section 10.2 de la spécification contient la plupart des détails généraux pour les types partiels.

Emplacements non valides :

  • Énumérations
  • Délégués

8voto

Keith Points 46288

Cela se fait, mais une question importante serait pourquoi?

Les classes partielles sont là pour vous permettre d'étendre le code généré automatiquement. VS peut générer un fichier de formulaire, ou un code-behind, ou un accesseur Linq to SQL et vous pouvez l'étendre à l'aide d'une classe partielle.

Je vous conseillerais d'éviter d'utiliser des classes partielles simplement pour diviser des classes (ou dans ce cas des interfaces) car généralement cela génère plus de confusion que cela en vaut la peine.

Dans ce cas, je vous conseille d'investiguer pourquoi cela doit être réparti sur plusieurs fichiers - les interfaces de modèle de fabrique peuvent rendre le suivi de votre code plus complexe, mais ici, vous devrez suivre votre code à travers plusieurs fichiers.

8voto

Konstantin Tarkus Points 16862

Oui, ça le fait.

Classes partielles et méthodes (Guide de programmation C#) chez MSDN

Restrictions:

  • Toutes les définitions d'interface de type partiel destinées à faire partie du même type doivent être modifiées avec **partial**.
  • Le modificateur partiel ne peut apparaître qu'avant le mot-clé interface.
  • Toutes les définitions de type partiel destinées à faire partie du même type doivent être définies dans le même assemblage et dans le même module (fichier .exe ou .dll).

Les interfaces partielles sont principalement utilisées lorsque la génération de code est impliquée. Par exemple, lorsque une partie d'une interface est générée et l'autre est écrite par l'utilisateur.

6voto

Anton Gogolev Points 59794

Oui, c'est le cas.

4voto

Krzysztof Kozmic Points 19262

Réfléchissez à deux fois avant de rendre votre interface partielle. Peut-être serait-il mieux de la diviser en deux interfaces ?

Gardez vos interfaces petites et ciblées. partial est un mauvais signe dans le code.

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