Gå til indholdet

Extension metoder

Extension metoder er en funktion i C#, der gør det muligt at tilføje nye metoder til eksisterende typer uden at ændre deres kildekode eller aflede nye typer. Dette er særligt nyttigt, når det kommer til at udvide funktionaliteten af typer fra tredjepartsbiblioteker eller .NET, hvor kildekoden ikke er tilgængelig eller ikke kan ændres.

For at oprette en extension metode, skal metoden være en statisk metode inden for en statisk klasse, og det første parameter skal være af typen, der udvides, skal markeres med nøgleordet this. Denne første parameter repræsenterer instansen af typen, som extension metoden kaldes på.

Extension metoder opfører sig som instansmetoder i den forstand, at de kan kaldes på instanser af den udvidede type på samme måde som almindelige instansmetoder. Det er dog vigtigt at huske, at extension metoder kun kan få adgang til de offentlige medlemmer af den udvidede type, da de ikke er en del af typens egentlige implementering.

Når der findes både en instansmetode og en extension metode med samme navn og signatur på en given type, vil instansmetoden altid have forrang, og extension metoden vil blive ignoreret.

Her er et eksempel:

using System;

namespace Extension
{
    public static class MineMetoder
    {
        // Udvider DateTime
        public static bool IsWeekend(this DateTime d) {
            if (d.DayOfWeek == DayOfWeek.Sunday || d.DayOfWeek == DayOfWeek.Saturday)
                return true;

            return false;
        }

        // Udvider string
        public static string LeftPartOfString(this string text, int number)
        {
            text += new string(' ', number);
            return text.Substring(0, number);
        }
    }
}