C# Language Utilizzo esplicito di un metodo di estensione

Esempio

I metodi di estensione possono anche essere usati come normali metodi di classi statiche. Questo modo di chiamare un metodo di estensione è più dettagliato, ma è necessario in alcuni casi.

static class StringExtensions
{
    public static string Shorten(this string text, int length) 
    {
        return text.Substring(0, length);
    }
}

Uso:

var newString = StringExtensions.Shorten("Hello World", 5);

Quando chiamare i metodi di estensione come metodi statici

Esistono ancora scenari in cui è necessario utilizzare un metodo di estensione come metodo statico:

  • Risolvere il conflitto con un metodo membro. Questo può accadere se una nuova versione di una libreria introduce un nuovo metodo membro con la stessa firma. In questo caso, il metodo membro sarà preferito dal compilatore.
  • Risolvere i conflitti con un altro metodo di estensione con la stessa firma. Ciò può accadere se due librerie includono metodi di estensione e spazi dei nomi simili di entrambe le classi con metodi di estensione utilizzati nello stesso file.
  • Passando il metodo di estensione come un gruppo di metodi in un parametro delegato.
  • Esegui il tuo legame con Reflection .
  • Utilizzo del metodo di estensione nella finestra Immediata in Visual Studio.

Uso statico

Se si using static direttiva using static per portare i membri statici di una classe statica in ambito globale, i metodi di estensione vengono saltati. Esempio:

using static OurNamespace.StringExtensions; // refers to class in previous example

// OK: extension method syntax still works.
"Hello World".Shorten(5);
// OK: static method syntax still works.
OurNamespace.StringExtensions.Shorten("Hello World", 5);
// Compile time error: extension methods can't be called as static without specifying class.
Shorten("Hello World", 5);

Se rimuovi this modificatore dal primo argomento del metodo Shorten , l'ultima riga verrà compilata.