Een aangepaste extensiemethode implementeren en aanroepen (C#-programmeerhandleiding)
In dit artikel wordt beschreven hoe u uw eigen extensiemethoden implementeert voor elk .NET-type. Clientcode kan uw extensiemethoden gebruiken. Clientprojecten moeten verwijzen naar de assembly die deze bevat. Clientprojecten moeten een using-instructie toevoegen waarmee de naamruimte wordt opgegeven waarin de extensiemethoden worden gedefinieerd.
De extensiemethode definiëren en aanroepen:
- Definieer een statische klasse die de extensiemethode bevat. De klasse kan niet worden genest binnen een ander type en moet zichtbaar zijn voor clientcode. Zie Access Modifiers voor meer informatie over toegankelijkheidsregels.
- Implementeer de extensiemethode als een statische methode met ten minste dezelfde zichtbaarheid als de bijbehorende klasse.
- De eerste parameter van de methode specificeert het type waarop de methode werkt; deze moet worden voorafgegaan door de wijzigingsfunctie .
- Voeg in de aanroepende code een
using
instructie toe om de naamruimte op te geven die de klasse extensiemethode bevat. - Roep de methoden aan als exemplaarmethoden voor het type.
Notitie
De eerste parameter wordt niet opgegeven door code aan te roepen omdat deze het type aangeeft waarop de operator wordt toegepast en de compiler al het type van uw object kent. U hoeft alleen argumenten op te geven voor parameters 2 tot n
en met .
In het volgende voorbeeld wordt een extensiemethode geïmplementeerd met de naam WordCount
in de CustomExtensions.StringExtension
klasse. De methode werkt op de String klasse, die is opgegeven als de eerste methodeparameter. De CustomExtensions
naamruimte wordt geïmporteerd in de naamruimte van de toepassing en de methode wordt binnen de Main
methode aangeroepen.
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;
}
}
}
Overbelastingsresolutie geeft de voorkeur aan een instantie of statische methode die door het type zelf is gedefinieerd voor uitbreidingsmethoden. Extensiemethoden hebben geen toegang tot persoonlijke gegevens in de uitgebreide klasse.