Sdílet prostřednictvím


Základní třídy pro implementaci abstrakcí

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

Přesněji řečeno, třída se stane základní třídou, když je z ní odvozena jiná třída. Pro účely této části je však základní třída třídou určená především k poskytování společné abstrakce nebo pro jiné třídy, aby znovu použily některé výchozí implementace, i když dědičnost. Základní třídy se obvykle nacházejí uprostřed hierarchií dědičnosti, mezi abstrakcí v kořenovém adresáři hierarchie a několika vlastními implementacemi v dolní části.

Slouží jako pomocné rutiny implementace pro implementaci abstrakcí. Rozhraním je IList<T> například jeden z abstrakcí architektury pro seřazené kolekce položek. Implementace IList<T> není triviální, a proto framework poskytuje několik základních tříd, jako Collection<T>KeyedCollection<TKey,TItem>a , které slouží jako pomocné rutiny pro implementaci vlastních kolekcí.

Základní třídy se obvykle nehodí k tomu, aby sloužily jako abstrakce samy o sobě, protože obvykle obsahují příliš mnoho implementace. Například Collection<T> základní třída obsahuje velké množství implementací souvisejících se skutečností, že implementuje negenerické IList rozhraní (pro lepší integraci s negenerickými kolekcemi) a skutečnost, že jde o kolekci položek uložených v paměti v některém z jejích polí.

Jak jsme již dříve probírali, základní třídy mohou poskytovat neocenitelnou pomoc uživatelům, kteří potřebují implementovat abstrakce, ale zároveň mohou být významnou odpovědností. Přidají povrchovou oblast a zvětší hloubku hierarchií dědičnosti, takže koncepčně komplikují architekturu. Základní třídy by proto měly být použity pouze v případě, že poskytují významné hodnoty uživatelům architektury. Měly by se jim vyhnout, pokud poskytují hodnotu pouze implementátorům architektury, v takovém případě by se mělo zvážit delegování na interní implementaci místo dědičnosti ze základní třídy.

✔️ ZVAŽTE, aby základní třídy byly abstraktní, i když neobsahují žádné abstraktní členy. To jasně komunikuje s uživateli, že třída je navržena výhradně tak, aby byla zděděna.

✔️ ZVAŽTE umístění základních tříd do samostatného oboru názvů od typů scénářů mainline. Podle definice jsou základní třídy určeny pro pokročilé scénáře rozšiřitelnosti, a proto nejsou zajímavé pro většinu uživatelů.

❌ Vyhněte se pojmenování základních tříd s příponou Base, pokud je třída určená pro použití ve veřejných rozhraních API.

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