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 spuštěny 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ářů se pokusí vyhledat a použít konstruktor, než zváží alternativní způsoby vytváření instancí, jako jsou tovární metody.

✔️ 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é tovární metody místo konstruktoru, pokud sémantika požadované operace nemapuje přímo na vytvoření nové instance nebo pokud se řídit pokyny pro návrh konstruktoru zdá být nepřirozené.

✔️ POZOR! Použijte parametry konstruktoru jako zkratky pro nastavení hlavních vlastností.

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ělo být použití velikosti písma.

Provádějte 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.

✔️ Vyvolávejte výjimky z konstruktorů instancí, pokud je to vhodné.

✔️ 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 mají 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í, že bude voláno nejvíce odvozené překrytí, i když konstruktor nejvíce odvozeného typu ještě nebyl plně spuštěn.

Pokyny pro konstruktor typů

✔️ Nastavte statické konstruktory jako privátní.

Statický konstruktor, označovaný také jako konstruktor třídy, se používá k inicializaci typu. CLR volá statický konstruktor před vytvořením první instance typu nebo před tím, než jsou volány jakékoli statické členy tohoto typu. Uživatel nemá kontrolu nad tím, kdy je volán 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# vyžaduje, aby statické konstruktory byly privátní.

❌ NEvyhazujte 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 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.

Viz také