Sdílet prostřednictvím


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í

  1. 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.

  2. Implementujte metodu rozšíření jako statickou metodu s alespoň stejnou viditelností jako obsahující třídu.

  3. První parametr metody určuje typ, se kterým metoda pracuje; musí být předcházet s tímto modifikátorem.

  4. Do volajícího kódu přidejte direktivu using pro určení oboru názvů , který obsahuje třídu metody rozšíření.

  5. 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 WordCountCustomExtensions.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é