Udostępnij za pośrednictwem


Jak: wdrożenia i wywołać metodę rozszerzenia niestandardowe (Podręcznik programowania C#)

W tym temacie przedstawiono sposób implementacji własnych metod rozszerzenie dla każdego typu w .NET Framework Class Library, lub innych.Typ sieci, który chcesz rozszerzyć.Kod klienta można użyć metody na rozszerzenie przez dodając odwołanie do biblioteki DLL, który je zawiera za pomocą dyrektywy, która określa obszar nazw, w którym są zdefiniowane metody rozszerzenie.

Aby zdefiniować i wywołać metodę rozszerzenia

  1. Definiowanie statycznego klasy zawiera metodę rozszerzenia.

    Klasa musi być widoczna dla kodu klienta.Aby uzyskać więcej informacji na temat zasady ułatwień dostępu, zobacz Modyfikatory dostępu (Podręcznik programowania C#).

  2. Wdrożenie metodą rozszerzenie jako statyczna metoda z co najmniej taką samą widoczność jak klasa zawierająca.

  3. Pierwszy parametr metody określa typ, że metoda działa na; musi być poprzedzone znakiem to modyfikator.

  4. Dodaj kod wywołujący using dyrektywy określenie obszaru nazw zawierający klasę rozszerzenia metody.

  5. Wywołanie metody tak, jakby były one metody instancji typu.

    Należy zauważyć, że pierwszy parametr nie jest określony przez wywołanie kodu, ponieważ reprezentuje ona typu, dla którego stosowana jest operator i kompilator już typu obiektu.Trzeba podać argumenty dla parametrów 2 poprzez n.

Przykład

Poniższy przykład implementuje metodę rozszerzenia o nazwie WordCount w CustomExtensions.StringExtension klasy.Metoda działa na String klasy, która jest określona jako pierwszy parametr metody.CustomExtensions Obszaru nazw jest importowany do obszaru nazw aplikacji i wewnątrz wywoływana jest metoda Main metody.

using System.Linq;
using System.Text;
using System;

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);
        }
    }
}

Kompilowanie kodu

Aby uruchomić ten kod, skopiuj i wklej go do programu Visual C# konsoli aplikacji projekt utworzony w Visual Studio.Domyślnie ten projekt jest przeznaczony dla wersji 3.5 .NET Framework, i odniesienie do System.Core.dll i using dla System.Linq w dyrektywie.Brakuje jednego lub więcej z tych wymagań z projektu, można dodać je ręcznie.Aby uzyskać więcej informacji, zobacz Jak: Tworzenie projektu LINQ.

Zabezpieczenia

Metody rozszerzenie obecnie nie szczególnych lukami w zabezpieczeniach.One nigdy nie można personifikować istniejących metod typu, ponieważ wszystkich konfliktów nazw są rozpoznawane korzyść z instancji lub statycznej metody zdefiniowane przez samego typu.Rozszerzenie metody nie można uzyskać dostępu do żadnych danych prywatnych w klasie rozszerzone.

Zobacz też

Informacje

Rozszerzenie metody (Podręcznik programowania C#)

Klasy statyczne i elementów klas statycznych (Podręcznik programowania C#)

chronione (C# odniesienia)

(C# wzorca wewnętrznego)

publicznego (C# odniesienia)

to (C# odwołanie)

obszar nazw (C# odniesienia)

Koncepcje

Podręcznik programowania C#

Inne zasoby

LINQ (zintegrowane języka kwerend)