partial, méthode (référence C#)

La signature d’une méthode partielle est définie dans une partie d’un type partiel, tandis que son implémentation est définie dans une autre partie du type. Les méthodes partielles permettent aux concepteurs de classes de fournir des hooks de méthode, semblables aux gestionnaires d’événements, que les développeurs peuvent décider ou non d’implémenter. Si le développeur ne fournit pas d’implémentation, le compilateur supprime la signature au moment de la compilation. Les méthodes partielles obéissent aux conditions suivantes :

  • Les déclarations doivent commencer par le mot clé contextuel partial.

  • Les signatures des deux parties du type partiel doivent correspondre.

Le mot clé partial n’est pas autorisé sur les constructeurs, les finaliseurs, les opérateurs surchargés, les déclarations de propriété ou les déclarations d’événement.

Une méthode partielle n’est pas nécessaire pour avoir une implémentation dans les cas suivants :

  • Elle n’a aucun modificateur d’accessibilité (y compris le private par défaut).

  • Elle retourne la valeur void.

  • Elle n’a pas de paramètres out.

  • Elle n’a aucun des modificateurs suivants : virtual, override, sealed, new ou extern.

Les méthodes qui ne sont pas conformes à toutes ces restrictions (par exemple, la méthode public virtual partial void) doivent fournir une implémentation.

L’exemple suivant illustre une méthode partielle définie dans deux parties d’une classe partielle :

namespace PM
{
    partial class A
    {
        partial void OnSomethingHappened(string s);
    }

    // This part can be in a separate file.
    partial class A
    {
        // Comment out this method and the program
        // will still compile.
        partial void OnSomethingHappened(String s)
        {
            Console.WriteLine("Something happened: {0}", s);
        }
    }
}

Les méthodes partielles peuvent également être utiles combinées avec des générateurs de source. Par exemple, une expression régulière peut être définie à l’aide du modèle suivant :

[GeneratedRegex("(dog|cat|fish)")]
partial bool IsPetMatch(string input);

Pour plus d’informations, consultez la page Classes et méthodes partielles.

Voir aussi