Metodo parziale (Riferimenti per C#)

Un metodo parziale ha la firma definita in una parte di un tipo parziale e l'implementazione definita in un'altra parte del tipo. I metodi parziali consentono a Progettazione classi di fornire gli hook del metodo, analoghi ai gestori eventi, che gli sviluppatori possono decidere se implementare o meno. Se lo sviluppatore non fornisce un'implementazione, il compilatore rimuove la firma in fase di compilazione. Ai metodi parziali si applicano le condizioni seguenti:

  • Le dichiarazioni devono iniziare con la parola chiave contestuale parziale.

  • Le firme nelle due parti del tipo parziale devono corrispondere.

La parola chiave partial non è consentita nei costruttori, nei finalizzatori, negli operatori di overload, nelle dichiarazioni di proprietà o nelle dichiarazioni di eventi.

Non è necessario un metodo parziale per avere un'implementazione nei casi seguenti:

  • Non dispone di modificatori di accessibilità (incluso il valore predefinito private).

  • Restituisce void.

  • Non dispone di parametri out.

  • Non dispone di uno dei modificatori seguenti: virtual, override, sealed, new o extern.

Qualsiasi metodo che non è conforme a tutte le restrizioni (ad esempio, il metodo public virtual partial void), deve fornire un'implementazione.

Nell'esempio seguente viene illustrato un metodo parziale definito in due parti di una classe parziale:

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);
        }
    }
}

I metodi parziali possono essere utili anche in combinazione con i generatori di origine. Ad esempio, è possibile definire un'espressione regolare usando il modello seguente:

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

Per altre informazioni, vedere Classi e metodi parziali.

Vedi anche