Metody rozšíření

Poznámka:

Tento obsah je znovu vytištěn oprávněním Pearson Education, Inc. z Framework Design Guidelines: Conventions, Idioms a Patterns for Reusable .NET Libraries, 2. vydání. Tato edice byla publikována v roce 2008 a kniha byla od té doby plně upravena ve třetím vydání. Některé informace na této stránce můžou být zastaralé.

Rozšiřující metody jsou funkce jazyka, která umožňuje volání statických metod pomocí syntaxe volání metody instance. Tyto metody musí mít alespoň jeden parametr, který představuje instanci, se kterou má metoda pracovat.

Třída, která definuje takové rozšiřující metody, se označuje jako "sponzor" třída a musí být deklarována jako statická. Chcete-li použít rozšiřující metody, je nutné importovat obor názvů definující třídu sponzora.

❌ Vyhněte se nechtěným definováním rozšiřujících metod, zejména u typů, které nevlastníte.

Pokud vlastníte zdrojový kód typu, zvažte místo toho použití běžných metod instance. Pokud vlastníte a chcete přidat metodu, buďte velmi opatrní. Použití rozšiřujících metod má potenciál nepotřebných rozhraní API typů, které nebyly navrženy tak, aby tyto metody měly.

✔️ ZVAŽTE použití rozšiřujících metod v některém z následujících scénářů:

  • Chcete-li poskytovat pomocné funkce relevantní pro každou implementaci rozhraní, lze-li tyto funkce psát z hlediska základního rozhraní. Je to proto, že konkrétní implementace nelze jinak přiřadit rozhraním. Operátory LINQ to Objects jsou například implementovány jako rozšiřující metody pro všechny IEnumerable<T> typy. Proto je jakákoli IEnumerable<> implementace automaticky povolena LINQ.

  • Když by metoda instance zavedla závislost na určitém typu, ale taková závislost by přerušovala pravidla správy závislostí. Například závislost od String do System.Uri není pravděpodobně žádoucí, a proto String.ToUri() by vrácení System.Uri metody instance bylo nesprávný návrh z pohledu správy závislostí. Metoda statického rozšíření Uri.ToUri(this string str) , která System.Uri vrací, by byla mnohem lepším návrhem.

❌ VYHNĚTE se definování rozšiřujících metod na System.Object.

Uživatelé VB nebudou moct takové metody volat u odkazů na objekty pomocí syntaxe metody rozšíření. VB nepodporuje volání takových metod, protože v jazyce VB deklaruje odkaz jako Objekt vynutí, aby všechna vyvolání metody byla zpožděná (skutečný člen volána je určena za běhu), zatímco vazby na rozšiřující metody jsou určeny v době kompilace (časná vazba).

Všimněte si, že pokyny platí pro jiné jazyky, ve kterých se vyskytuje stejné chování vazby nebo kde nejsou podporovány rozšiřující metody.

❌ NEPOUŽÍVEJTE rozšiřující metody do stejného oboru názvů jako rozšířený typ, pokud se nejedná o přidání metod do rozhraní nebo pro správu závislostí.

❌ Vyhněte se definování dvou nebo více rozšiřujících metod se stejným podpisem, i když se nacházejí v různých oborech názvů.

✔️ ZVAŽTE definování rozšiřujících metod ve stejném oboru názvů jako rozšířený typ, pokud je typ rozhraní a pokud jsou metody rozšíření určeny k použití ve většině nebo ve všech případech.

❌ NEdefinujte rozšiřující metody implementace funkce v oborech názvů, které jsou obvykle přidruženy k jiným funkcím. Místo toho je definujte v oboru názvů přidruženém k funkci, do které patří.

❌ VYHNĚTE se obecnému pojmenování oborů názvů vyhrazených pro rozšiřující metody (např. "Extensions"). Místo toho použijte popisný název (např. "Směrování").

© Části 2005, 2009 Microsoft Corporation. Všechna práva vyhrazena.

Reprinted by permission of Pearson Education, Inc. from Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition by Krzysztof Cwalina and Brad Abrams, published Oct 22, 2008 by Addison-Wesley Professional v rámci Microsoft Windows Development Series.

Viz také