Tilläggsmetoder
Kommentar
Det här innehållet skrivs om med behörighet från Pearson Education, Inc. från Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition. Den utgåvan publicerades 2008, och boken har sedan dess reviderats helt i den tredje utgåvan. En del av informationen på den här sidan kan vara inaktuell.
Tilläggsmetoder är en språkfunktion som gör att statiska metoder kan anropas med instansmetodens anropssyntax. Dessa metoder måste ta minst en parameter, vilket representerar den instans som metoden ska köras på.
Klassen som definierar sådana tilläggsmetoder kallas "sponsor"-klassen och måste deklareras som statisk. Om du vill använda tilläggsmetoder måste du importera namnområdet som definierar sponsorklassen.
❌ UNDVIK oseriöst definiera tilläggsmetoder, särskilt för typer som du inte äger.
Om du använder en egen källkod av en typ bör du överväga att använda vanliga instansmetoder i stället. Om du inte äger och vill lägga till en metod bör du vara mycket försiktig. Liberal användning av tilläggsmetoder har potential att belamra API:er av typer som inte har utformats för att ha dessa metoder.
✔️ ÖVERVÄG att använda tilläggsmetoder i något av följande scenarier:
För att tillhandahålla hjälpfunktioner som är relevanta för varje implementering av ett gränssnitt, om dessa funktioner kan skrivas i termer av kärngränssnittet. Detta beror på att konkreta implementeringar annars inte kan tilldelas till gränssnitt. Operatorerna
LINQ to Objects
implementeras till exempel som tilläggsmetoder för alla IEnumerable<T> typer. Därför är allaIEnumerable<>
implementeringar automatiskt LINQ-aktiverade.När en instansmetod skulle införa ett beroende av någon typ, men ett sådant beroende skulle bryta mot reglerna för beroendehantering. Till exempel är ett beroende från String till System.Uri förmodligen inte önskvärt, så
String.ToUri()
instansmetoden som returnerarSystem.Uri
skulle vara fel design ur ett beroendehanteringsperspektiv. En statisk tilläggsmetodUri.ToUri(this string str)
som returnerarSystem.Uri
skulle vara en mycket bättre design.
❌ UNDVIK att definiera tilläggsmetoder på System.Object.
VB-användare kan inte anropa sådana metoder på objektreferenser med hjälp av syntaxen för tilläggsmetoden. VB stöder inte anrop av sådana metoder eftersom en referens som Objekt i VB tvingar alla metodanrop på den att vara senbundna (den faktiska medlemmen som anropas bestäms vid körning), medan bindningar till tilläggsmetoder bestäms vid kompileringstid (tidig bindning).
Observera att riktlinjen gäller för andra språk där samma bindningsbeteende finns eller där tilläggsmetoder inte stöds.
❌ Placera INTE tilläggsmetoder i samma namnområde som den utökade typen om det inte är för att lägga till metoder i gränssnitt eller för beroendehantering.
❌ UNDVIK att definiera två eller flera tilläggsmetoder med samma signatur, även om de finns i olika namnområden.
✔️ ÖVERVÄG att definiera tilläggsmetoder i samma namnområde som den utökade typen om typen är ett gränssnitt och om tilläggsmetoderna är avsedda att användas i de flesta eller alla fall.
❌ Definiera INTE tilläggsmetoder som implementerar en funktion i namnområden som normalt är associerade med andra funktioner. Definiera dem i stället i det namnområde som är associerat med den funktion som de tillhör.
❌ UNDVIK allmän namngivning av namnområden som är dedikerade till tilläggsmetoder (t.ex. "Tillägg"). Använd ett beskrivande namn (t.ex. "Routning") i stället.
Portioner © 2005, 2009 Microsoft Corporation. Med ensamrätt.
Reprinted by permission of Pearson Education, Inc. from Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition by Krzysztof Cwalina and Brad Abrams, publicerad 22 okt 2008 av Addison-Wesley Professional som en del av Microsoft Windows Development Series.