Sdílet prostřednictvím


Návrh rozhraní

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é.

I když je většina rozhraní API nejlépe modelovaná pomocí tříd a struktur, existují případy, kdy jsou rozhraní vhodnější nebo jsou jedinou možností.

CLR nepodporuje více dědičnosti (tj. třídy CLR nemohou dědit z více než jedné základní třídy), ale umožňuje typům implementovat jedno nebo více rozhraní kromě dědění ze základní třídy. Rozhraní se proto často používají k dosažení efektu vícenásobné dědičnosti. Jedná se například o rozhraní, IDisposable které umožňuje typům podporovat disposability nezávisle na jakékoli jiné hierarchii dědičnosti, do které se chtějí zapojit.

Druhá situace, ve které je definování rozhraní vhodné, je vytvoření společného rozhraní, které může být podporováno několika typy, včetně některých hodnotových typů. Typy hodnot nemohou dědit z jiných typů než ValueType, ale mohou implementovat rozhraní, takže použití rozhraní je jedinou možností pro poskytnutí společného základního typu.

✔️ Definujte rozhraní, pokud potřebujete některé běžné rozhraní API, které má být podporováno sadou typů, které zahrnují typy hodnot.

✔️ ZVAŽTE definování rozhraní, pokud potřebujete podporovat jeho funkce u typů, které již dědí z nějakého jiného typu.

❌ NEPOUŽÍVEJTE rozhraní značek (rozhraní bez členů).

Pokud potřebujete označit třídu jako specifickou vlastnost (značku), obecně použijte místo rozhraní vlastní atribut.

✔️ ZADEJTE alespoň jeden typ, který je implementací rozhraní.

To vám pomůže ověřit návrh rozhraní. Jedná se například List<T> o implementaci IList<T> rozhraní.

✔️ DO zadejte alespoň jedno rozhraní API, které využívá každé rozhraní, které definujete (metoda přebírá rozhraní jako parametr nebo vlastnost, která se jako rozhraní zadá).

To vám pomůže ověřit návrh rozhraní. Například List<T>.Sort využívá System.Collections.Generic.IComparer<T> rozhraní.

❌ NEPŘIDÁVEJTE členy do rozhraní, které bylo dříve odesláno.

Tím by se přerušily implementace rozhraní. Měli byste vytvořit nové rozhraní, abyste se vyhnuli problémům s verzí.

S výjimkou situací popsaných v těchto pokynech byste měli obecně zvolit třídy místo rozhraní při navrhování opakovaně použitelných knihoven spravovaného kódu.

© Čá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é