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
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#).
Wdrożenie metodą rozszerzenie jako statyczna metoda z co najmniej taką samą widoczność jak klasa zawierająca.
Pierwszy parametr metody określa typ, że metoda działa na; musi być poprzedzone znakiem to modyfikator.
Dodaj kod wywołujący using dyrektywy określenie obszaru nazw zawierający klasę rozszerzenia metody.
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#)