Jak implementovat a volat vlastní metodu rozšíření (Průvodce programováním v C#)
Toto téma ukazuje, jak implementovat vlastní metody rozšíření pro libovolný typ .NET. Klientský kód může použít metody rozšíření přidáním odkazu na knihovnu DLL, která je obsahuje, a přidáním direktivy using , která určuje obor názvů, ve kterém jsou definovány rozšiřující metody.
Definování a volání metody rozšíření
Definujte statickou třídu , která bude obsahovat rozšiřující metodu.
Třída musí být viditelná pro kód klienta. Další informace o pravidlech přístupnosti najdete v tématu Modifikátory accessu.
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í být předcházet s tímto modifikátorem.
Do volajícího kódu přidejte direktivu
using
pro určení oboru názvů , který obsahuje třídu metody rozšíření.Volejte metody, jako by se jednalo o metody instance typu.
Všimněte si, že 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. Argumenty parametrů 2 až
n
.
Příklad
Následující příklad implementuje rozšiřující metodu pojmenovanou WordCount
CustomExtensions.StringExtension
ve třídě. Metoda pracuje s String třídou, která je určena jako první parametr metody. Obor CustomExtensions
názvů se naimportuje do oboru názvů aplikace a metoda se volá uvnitř Main
metody.
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;
}
}
}
namespace Extension_Methods_Simple
{
// Import the extension method namespace.
using CustomExtensions;
class Program
{
static void Main(string[] args)
{
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);
}
}
}
Zabezpečení .NET
Metody rozšíření neobsahují žádná konkrétní ohrožení zabezpečení. Nelze je nikdy použít k zosobnění existujících metod u typu, protože všechny kolize názvů jsou vyřešeny ve prospěch instance nebo statické metody definované samotným typem. Rozšiřující metody nemají přístup k žádným privátním datům v rozšířené třídě.
Viz také
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro