about_Calling_Generic_Methods
Typy ogólne umożliwiają dostosowanie metody, klasy, struktury lub interfejsu do dokładnego typu danych, na którym działa. Na przykład zamiast używać Hashtable klasy , która umożliwia używanie kluczy i wartości dowolnego typu, można użyć Dictionary<TKey,TValue> klasy ogólnej i określić typy dozwolone dla właściwości klucza i wartości . Typy ogólne zapewniają zwiększoną możliwość ponownego użytkowania kodu i bezpieczeństwo typów.
W przypadku niektórych metod ogólnych program PowerShell może ustalić ogólne argumenty dla metody, wywnioskując z podanych argumentów. Jednak rozpoznawanie metody może być skomplikowane, gdy metoda ma zarówno przeciążenia ogólne, jak i nieogólne, lub gdy metoda ogólna nie przyjmuje parametru formalnego. Program PowerShell może nie rozpoznać poprawnej metody bez jawnych argumentów metody ogólnej.
Na przykład [Array]::Empty<T>()
. Klasa .NET Array ma statyczną, ogólną metodę Empty<T>()
, która nie przyjmuje parametrów formalnych.
Przed programem PowerShell 7.3 w celu zapewnienia prawidłowego rozwiązania metody trzeba było użyć skomplikowanych obejść przy użyciu odbicia platformy .NET. Aby zapoznać się z przykładem, zobacz wpis w blogu Lee Holmes dotyczący wywoływania metod ogólnych w klasach niegenerycznych w programie PowerShell.
Począwszy od programu PowerShell 7.3, można określić typy dla metody ogólnej.
Składnia
Metoda ogólna jest metodą z dwiema listami parametrów: listą typów ogólnych i listą argumentów metody.
W poniższych przykładach przedstawiono nową składnię programu PowerShell na potrzeby uzyskiwania dostępu do metody ogólnej:
# static generic methods
[type_name]::MethodName[generic_type_arguments](method_arguments)
# instance generic methods
$object.MethodName[generic_type_arguments](method_arguments)
Może generic_type_arguments
to być pojedyncza lub rozdzielona przecinkami lista typów, takich jak , w tym inne typy ogólne, takie jak [string, int]
$obj.MethodName[string, System.Collections.Generic.Dictionary[string, int]]()
Może method_arguments
to być zero lub więcej elementów.
Aby uzyskać więcej informacji, zobacz Generics in .NET (Typy ogólne na platformie .NET).
Przykład
W tym przykładzie utworzymy listę liczb całkowitych, a następnie użyjemy System.Linq.Enumerable
klasy , aby wyliczyć wartości i przekształcić je w nową wartość.
Zmienna $list
jest obiektem ogólnym List<T>
, który może zawierać tylko liczby całkowite. List<T>
jest klasą ogólną, która umożliwia określenie typu jego składowych podczas jego tworzenia.
[System.Linq.Enumerable]::Select<T1,T2>(T1,T2)
jest metodą ogólną, która wymaga dwóch parametrów typu ogólnego i dwóch parametrów wartości formalnej.
[System.Collections.Generic.List[int]]$list = @( 1, 2, 3, 4, 5 )
$result = [System.Linq.Enumerable]::Select[int, float](
$list,
[Func[int, float]]{
param($item)
[math]::Pow($item, 3)
}
)
$result
Dane wyjściowe pokazują każdą wartość podniesioną do potęgi 3.
1
8
27
64
125
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla