Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 nevlastníte a chcete přidat metodu, buďte velmi opatrní. Příliš časté používání rozšiřujících metod má potenciál zahltit rozhraní API typů, které nebyly navrženy pro tyto metody.
✔️ 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ákoliIEnumerable<>
implementace automaticky povolena LINQ.Když by instanční metoda zavedla závislost na určitém typu, ale taková závislost by porušovala pravidla řízení závislostí. Například závislost od String do System.Uri není pravděpodobně žádoucí, a tak metoda instance
String.ToUri()
vracejícíSystem.Uri
by byla nesprávným návrhem z pohledu řízení 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 deklarace odkazu jako Object způsobí, že všechna volání metod budou opožděná (skutečný člen, který je volán, se určuje za běhu), zatímco vazby na rozšiřující metody jsou určeny v době kompilace (rané připojení).
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ří.
❌ VYVARUJTE se obecnému pojmenování oborů názvů určených pro rozšiřující metody (např. "Extensions"). Místo toho použijte popisný název (např. "Směrování").
Části z © 2005, 2009 Microsoft Corporation. Všechna práva vyhrazena.
Přetištěno se svolením Pearson Education, Inc. z Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition od Krzysztofa Cwaliny a Brada Abramse, vydáno 22. října 2008 nakladatelstvím Addison-Wesley Professional jako součást série Microsoft Windows Development.