Udostępnij przez


Projekt konstruktora

Uwaga / Notatka

Ta treść jest przedrukowana za zgodą Pearson Education, Inc. z Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2. wydanie. Wydanie to zostało opublikowane w 2008 roku, a książka została w pełni zmieniona w trzecim wydaniu. Niektóre informacje na tej stronie mogą być nieaktualne.

Istnieją dwa rodzaje konstruktorów: konstruktory typów i konstruktory instancji.

Konstruktory typów są statyczne i są uruchamiane przez CLR przed zastosowaniem typu. Konstruktory wystąpień uruchamiają się w momencie utworzenia wystąpienia typu.

Konstruktory typów nie mogą przyjmować żadnych parametrów. Konstruktory obiektów mogą to robić. Konstruktory wystąpień, które nie przyjmują żadnych parametrów, są często nazywane konstruktorami bez parametrów.

Konstruktory to najbardziej naturalny sposób na tworzenie instancji typu. Większość deweloperów będzie szukać i starać się użyć konstruktora, zanim rozważy alternatywne sposoby tworzenia wystąpień (takich jak metody fabryczne).

✔️ ROZWAŻ zapewnienie prostego, idealnego domyślnego konstruktora.

Prosty konstruktor ma bardzo małą liczbę parametrów, a wszystkie parametry są elementami pierwotnymi lub wyliczeniami. Takie proste konstruktory zwiększają użyteczność struktury.

✔️ ROZWAŻ użycie statycznej metody fabrycznej zamiast konstruktora, jeśli semantyka żądanej operacji nie odpowiada bezpośrednio konstrukcji nowego wystąpienia lub jeśli przestrzeganie wytycznych projektowych konstruktora wydaje się nienaturalne.

✔️ DO używaj parametrów konstruktora jako skrótów do ustawiania głównych właściwości.

Nie powinno istnieć różnice w semantyce między użyciem pustego konstruktora, a następnie niektórych zestawów właściwości i używania konstruktora z wieloma argumentami.

✔️ Należy użyć tej samej nazwy dla parametrów konstruktora i właściwości, jeśli parametry konstruktora są używane do po prostu ustawiania właściwości.

Jedyną różnicą między takimi parametrami a właściwościami powinna być wielkość liter.

✔️ Wykonaj minimalną pracę w konstruktorze.

Konstruktory nie powinny wykonywać dużo pracy poza przechwytywaniem parametrów konstruktora. Koszt każdego innego przetwarzania powinien zostać opóźniony do momentu, gdy będzie to wymagane.

✔️ W razie potrzeby zgłaszaj wyjątki w konstruktorach wystąpień.

Należy jawnie deklarować publiczny konstruktor bez parametrów w klasach, jeśli taki konstruktor jest wymagany.

Jeśli nie deklarujesz jawnie żadnych konstruktorów w typie, wiele języków (takich jak C#) automatycznie doda publiczny konstruktor bez parametrów. Klasy abstrakcyjne mają chroniony konstruktor.

Dodanie konstruktora sparametryzowanego do klasy uniemożliwia kompilatorowi dodanie konstruktora bez parametrów. Często prowadzi to do przypadkowych, niezgodnych zmian.

❌ UNIKAJ jawnego definiowania konstruktorów bez parametrów w strukturach.

Dzięki temu tworzenie tablicy jest szybsze, ponieważ jeśli konstruktor bez parametrów nie jest zdefiniowany, nie musi być uruchamiany w każdym miejscu w tablicy. Należy pamiętać, że wiele kompilatorów, w tym języka C#, nie zezwala na używanie konstruktorów bez parametrów z tego powodu.

❌ Należy unikać wywoływania wirtualnych elementów członkowskich w obiekcie wewnątrz konstruktora.

Wywołanie wirtualnego elementu członkowskiego spowoduje wywołanie najbardziej pochodnego przesłonięcia, nawet jeśli konstruktor najbardziej pochodnego typu nie został jeszcze w pełni uruchomiony.

Wskazówki dotyczące konstruktora typu

✔️ Należy zrobić, aby konstruktor statyczny był prywatny.

Konstruktor statyczny, nazywany również konstruktorem klasy, służy do inicjowania typu. CLR wywołuje konstruktor statyczny przed utworzeniem pierwszego wystąpienia typu lub wywołaniem jakiegokolwiek statycznego elementu tego typu. Użytkownik nie ma kontroli nad wywoływaniem konstruktora statycznego. Jeśli konstruktor statyczny nie jest prywatny, może być wywoływany przez kod inny niż CLR. W zależności od operacji wykonywanych w konstruktorze może to spowodować nieoczekiwane zachowanie. Kompilator języka C# wymusza, aby konstruktory statyczne stały się prywatne.

❌ NIE zgłaszaj wyjątków od konstruktorów statycznych.

Jeśli wyjątek jest zgłaszany z konstruktora typu, typ nie może być używany w bieżącej domenie aplikacji.

✔️ ROZWAŻ zainicjowanie pól statycznych inline, a nie jawnie przy użyciu konstruktorów statycznych, gdyż środowisko uruchomieniowe jest w stanie zoptymalizować wydajność typów, które nie mają jawnie zdefiniowanego konstruktora statycznego.

© Części 2005, 2009 Microsoft Corporation. Wszelkie prawa zastrzeżone.

Przedrukowane za zgodą Pearson Education, Inc. z Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition przez Krzysztofa Cwalinę i Brada Abramsa, opublikowane 22 października 2008 przez Addison-Wesley Professional w ramach serii Microsoft Windows Development.

Zobacz także