Sdílet prostřednictvím


Návrh konstruktoru

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

Existují dva druhy konstruktorů: konstruktory typů a konstruktory instancí.

Konstruktory typů jsou statické a jsou spouštěné clr před použitím typu. Konstruktory instance se spouští při vytvoření instance typu.

Konstruktory typů nemohou přijímat žádné parametry. Konstruktory instancí mohou. Konstruktory instancí, které nepřebírají žádné parametry, se často označují jako konstruktory bez parametrů.

Konstruktory představují nejpřirozenější způsob vytváření instancí typu. Většina vývojářů vyhledá a pokusí se použít konstruktor před zvážením alternativních způsobů vytváření instancí (jako jsou metody továrny).

✔️ ZVAŽTE poskytnutí jednoduchých, ideálně výchozích konstruktorů.

Jednoduchý konstruktor má velmi malý počet parametrů a všechny parametry jsou primitivy nebo výčty. Tyto jednoduché konstruktory zvyšují použitelnost architektury.

✔️ ZVAŽTE použití statické metody továrny místo konstruktoru, pokud sémantika požadované operace nemapuje přímo na výstavbu nové instance nebo pokud se podle pokynů pro návrh konstruktoru cítí nepřirozeně.

✔️ Do use constructor parameters as shortcuts for setting main properties.

Mezi použitím prázdného konstruktoru následovaného některými sadami vlastností a použitím konstruktoru s více argumenty by neměl být žádný rozdíl.

✔️ Použijte stejný název pro parametry konstruktoru a vlastnost, pokud jsou parametry konstruktoru použity k jednoduchému nastavení vlastnosti.

Jediným rozdílem mezi těmito parametry a vlastnostmi by měla být velikost velikostí a velikostí.

✔️ Proveďte minimální práci v konstruktoru.

Konstruktory by neměly provádět mnoho práce kromě zachycení parametrů konstruktoru. Náklady na jakékoli jiné zpracování by se měly zpozdit, dokud nebudou vyžadovány.

✔️ V případě potřeby vyvolá výjimky z konstruktorů instancí.

✔️ DO explicitně deklarujte veřejný konstruktor bez parametrů ve třídách, pokud je takový konstruktor povinný.

Pokud explicitně nehlásíte žádné konstruktory typu, mnoho jazyků (například C#) automaticky přidá veřejný konstruktor bez parametrů. (Abstraktní třídy získávají chráněný konstruktor.)

Přidání parametrizovaného konstruktoru do třídy brání kompilátoru v přidání konstruktoru bez parametrů. To často způsobuje náhodné rozbíjející změny.

❌ VYHNĚTE se explicitní definování konstruktorů bez parametrů na strukturách.

Díky tomu je vytváření pole rychlejší, protože pokud není definovaný konstruktor bez parametrů, nemusí být spuštěný na každém slotu v poli. Všimněte si, že mnoho kompilátorů, včetně jazyka C#, neumožňuje strukturám z tohoto důvodu konstruktory bez parametrů.

❌ Vyhněte se volání virtuálních členů na objekt uvnitř jeho konstruktoru.

Volání virtuálního člena způsobí volání nejvíce odvozeného přepsání, a to i v případě, že konstruktor nejvíce odvozeného typu ještě nebyl plně spuštěn.

Pokyny pro konstruktor typů

✔️ Udělejte statické konstruktory jako soukromé.

Statický konstruktor, označovaný také jako konstruktor třídy, se používá k inicializaci typu. CLR volá statický konstruktor před první instancí typu je vytvořen nebo všechny statické členy na tomto typu jsou volána. Uživatel nemá žádnou kontrolu nad tím, kdy je volána statická konstruktor. Pokud statický konstruktor není soukromý, může ho volat jiný kód než CLR. V závislosti na operacích provedených v konstruktoru to může způsobit neočekávané chování. Kompilátor jazyka C# vynutí, aby statické konstruktory byly soukromé.

❌ NEvolejte výjimky ze statických konstruktorů.

Pokud je vyvolána výjimka z konstruktoru typu, typ není použitelný v aktuální doméně aplikace.

✔️ ZVAŽTE inicializaci statických polí místo explicitního použití statických konstruktorů, protože modul runtime dokáže optimalizovat výkon typů, které nemají explicitně definovaný statický konstruktor.

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