Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek ukazuje, jak implementovat vlastní metody rozšíření pro libovolný typ .NET. Klientský kód může používat vaše rozšiřující metody. Klientské projekty musí odkazovat na sestavení, které je obsahuje. Klientské projekty musí přidat direktivu using , která určuje obor názvů, ve kterém jsou definovány metody rozšíření.
Definování a volání metody rozšíření:
- Definujte statickou třídu , která bude obsahovat rozšiřující metodu. Třídu nelze vnořit do jiného typu a musí být viditelná pro kód klienta. Další informace o pravidlech přístupnosti viz Modifikátory přístupu.
- Implementujte metodu rozšíření jako statickou metodu s alespoň stejnou viditelností jako obsahující třídu.
- První parametr metody určuje typ, se kterým metoda pracuje; musí mu předcházet tímto modifikátorem.
- Do volajícího kódu přidejte direktivu
usingpro určení oboru názvů , který obsahuje třídu metody rozšíření. - Volejte metody jako instance metody daného typu.
Poznámka:
První parametr není určen voláním kódu, protože představuje typ, na kterém se operátor používá, a kompilátor již zná typ objektu. Stačí poskytnout argumenty pro parametry 2 až n.
Následující příklad implementuje rozšiřující metodu nazvanou WordCount ve třídě CustomExtensions.StringExtension. Metoda pracuje s String třídou, která je určena jako první parametr metody. Obor CustomExtensions názvů je importován do oboru názvů aplikace a metoda je volána v rámci metody Main.
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 {i}");
namespace CustomExtensions
{
// Extension methods must be defined in a static class.
public static class StringExtension
{
extension(string str)
{
// This is the extension member.
// The `str` parameter is declared on the extension declaration.
public int WordCount()
{
return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
}
}
Rozlišení přetížení upřednostňuje instanci nebo statickou metodu definovanou samotným typem před rozšiřujícími metodami. Rozšiřující metody nemají přístup k žádným soukromým datům v rozšířené třídě.