Dela via


Så här implementerar och anropar du en anpassad tilläggsmetod (C#-programmeringsguide)

Den här artikeln visar hur du implementerar egna tilläggsmetoder för alla .NET-typer. Klientkoden kan använda dina tilläggsmetoder. Klientprojekt måste referera till sammansättningen som innehåller dem. Klientprojekt måste lägga till ett användningsdirektiv som anger det namnområde där tilläggsmetoderna definieras.

Så här definierar och anropar du tilläggsmetoden:

  1. Definiera en statisk klass som ska innehålla tilläggsmetoden. Klassen kan inte kapslas i en annan typ och måste vara synlig för klientkoden. Mer information om hjälpmedelsregler finns i Åtkomstmodifierare.
  2. Implementera tilläggsmetoden som en statisk metod med minst samma synlighet som den innehållande klassen.
  3. Den första parametern för metoden anger vilken typ metoden körs på. den måste föregås av den här modifieraren.
  4. I anropskoden lägger du till ett using direktiv för att ange det namnområde som innehåller klassen extension-metod.
  5. Anropa metoderna som instansmetoder för typen.

Kommentar

Den första parametern anges inte genom att anropa kod eftersom den representerar den typ som operatorn tillämpas på, och kompilatorn känner redan till typen av objekt. Du behöver bara ange argument för parametrarna 2 till och med n.

I följande exempel implementeras en tilläggsmetod med namnet WordCount i CustomExtensions.StringExtension klassen. Metoden fungerar på String klassen, som anges som den första metodparametern. Namnområdet CustomExtensions importeras till programmets namnområde och metoden anropas i Main metoden.

using CustomExtensions;

string s = "The quick brown fox jumped over the lazy dog.";
// Call the method as if it were an
// instance method on the type. Note that the first
// parameter is not specified by the calling code.
int i = s.WordCount();
System.Console.WriteLine("Word count of s is {0}", i);


namespace CustomExtensions
{
    // Extension methods must be defined in a static class.
    public static class StringExtension
    {
        // This is the extension method.
        // The first parameter takes the "this" modifier
        // and specifies the type for which the method is defined.
        public static int WordCount(this string str)
        {
            return str.Split(new char[] {' ', '.','?'}, StringSplitOptions.RemoveEmptyEntries).Length;
        }
    }
}

Överbelastningsmatchning föredrar instans eller statisk metod som definieras av själva typen än tilläggsmetoder. Tilläggsmetoder kan inte komma åt några privata data i den utökade klassen.

Se även