Metody rozszerzania

Metody rozszerzeń to funkcja języka, która umożliwia wywoływanie metod statycznych przy użyciu składni wywołania metody wystąpienia. Te metody muszą przyjmować co najmniej jeden parametr, który reprezentuje wystąpienie, na którym ma działać metoda .

Klasa definiująca takie metody rozszerzenia jest nazywana klasą "sponsor" i musi być zadeklarowana jako statyczna. Aby użyć metod rozszerzenia, należy zaimportować przestrzeń nazw definiującą klasę sponsor.

❌ UNIKAJ niepomyślnego definiowania metod rozszerzeń, szczególnie w przypadku typów, których nie jesteś właścicielem.

Jeśli korzystasz z własnego kodu źródłowego typu, rozważ użycie metod zwykłego wystąpienia. Jeśli nie jesteś właścicielem i chcesz dodać metodę , należy zachować ostrożność. Korzystanie z metod rozszerzeń może potencjalnie zaśmiecać interfejsy API typów, które nie zostały zaprojektowane z myślą o tych metodach.

✔️ ROZWAŻYĆ użycie metod rozszerzeń w dowolnym z następujących scenariuszy:

  • Aby zapewnić funkcje pomocnika istotne dla każdej implementacji interfejsu, jeśli te funkcje mogą być napisane w formie interfejsu podstawowego. Wynika to z tego, że do interfejsów nie można przypisać konkretnych implementacji. Na przykład LINQ to Objects operatory są implementowane jako metody rozszerzeń dla wszystkich IEnumerable<T> typów. W związku z tym IEnumerable<> każda implementacja jest automatycznie włączona z obsługą LINQ.

  • Gdy metoda wystąpienia wprowadza zależność od jakiegoś typu, ale taka zależność może złamać reguły zarządzania zależnościami. Na przykład zależność od do prawdopodobnie nie jest pożądana, więc zwracanie metody wystąpienia byłoby niewłaściwym projektem z String System.Uri punktu widzenia zarządzania String.ToUri() System.Uri zależnościami. Metoda rozszerzenia Uri.ToUri(this string str) statycznego System.Uri zwracałaby znacznie lepszą konstrukcję.

❌ UNIKAJ definiowania metod rozszerzeń w pliku System.Object .

Użytkownicy języka VB nie będą mogli wywołać takich metod w odwołaniach do obiektów przy użyciu składni metody rozszerzenia. VB nie obsługuje wywoływania takich metod, ponieważ w programie VB deklarowanie odwołania jako obiektu wymusza późne powiązanie wszystkich wywołań metod (rzeczywista wywołana member jest określana w czasie działania), podczas gdy powiązania z metodami rozszerzeń są określane w czasie kompilacji (wczesne powiązanie).

Należy pamiętać, że wytyczne dotyczą innych języków, w których występuje takie samo zachowanie powiązania lub gdy metody rozszerzenia nie są obsługiwane.

❌ NIE umieszczaj metod rozszerzeń w tej samej przestrzeni nazw co typ rozszerzony, chyba że jest to metoda dodawania metod do interfejsów lub zarządzania zależnościami.

❌ UNIKAJ definiowania co najmniej dwóch metod rozszerzeń z tym samym podpisem, nawet jeśli znajdują się one w różnych przestrzeniach nazw.

✔️ należy rozważyć zdefiniowanie metod rozszerzenia w tej samej przestrzeni nazw co typ rozszerzony, jeśli typ jest interfejsem i czy metody rozszerzenia są przeznaczone do użycia w większości lub we wszystkich przypadkach.

❌ NIE NALEŻY definiować metod rozszerzeń implementowania funkcji w przestrzeniach nazw normalnie skojarzonych z innymi funkcjami. Zamiast tego zdefiniuj je w przestrzeni nazw skojarzonej z funkcją, do której należą.

❌ UNIKAJ ogólnych nazw przestrzeni nazw przeznaczonych dla metod rozszerzeń (np. "Rozszerzenia"). Zamiast tego użyj nazwy opisowej (np. "Routing").

Części © 2005, 2009 Microsoft Corporation. Wszelkie prawa zastrzeżone.

Reprinted by permission of Pearson Education, Inc. from Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition, autorstwa Krzysztofa Cwaliny i Brada Abramsa, opublikowanego 22 października 2008 r. przez firmę Addison-Wesley Professional jako część serii Microsoft Windows Development.

Zobacz też