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:
- 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.
- Implementera tilläggsmetoden som en statisk metod med minst samma synlighet som den innehållande klassen.
- 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.
- I anropskoden lägger du till ett
using
direktiv för att ange det namnområde som innehåller klassen extension-metod.
- Anropa metoderna som instansmetoder för typen.
Anteckning
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.";
int i = s.WordCount();
System.Console.WriteLine($"Word count of s is {i}");
namespace CustomExtensions
{
public static class StringExtension
{
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.