Projekt konstruktora

Uwaga

Ta zawartość jest drukowana przez uprawnienie Pearson Education, Inc. z Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition. 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 wystąpień.

Konstruktory typów są statyczne i są uruchamiane przez CLR przed zastosowaniem typu. Konstruktory wystąpień są uruchamiane po utworzeniu wystąpienia typu.

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

Konstruktory są najbardziej naturalnym sposobem tworzenia wystąpień typu. Większość deweloperów wyszuka konstruktora i spróbuje użyć konstruktora, zanim rozważy alternatywne sposoby tworzenia wystąpień (takich jak metody fabryki).

✔️ 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 metody statycznej fabryki zamiast konstruktora, jeśli semantyka żądanej operacji nie jest mapowania bezpośrednio na konstrukcję nowego wystąpienia lub jeśli zgodnie z wytycznymi projektowymi konstruktora nie ma zastosowania.

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

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 powinny być wielkości 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 od konstruktorów wystąpień.

✔️ Jawne deklarowanie publicznego konstruktora 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 uzyskują chroniony konstruktor).

Dodanie konstruktora sparametryzowanego do klasy uniemożliwia kompilatorowi dodanie konstruktora bez parametrów. Często powoduje to przypadkowe zmiany powodujące niezgodność.

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

❌ UNIKAJ 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

✔️ ZROBIĆ, aby konstruktory statyczne stały się prywatne.

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ływani są wszystkie statyczne elementy członkowskie 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 wbudowanych pól statycznych, a nie jawnie przy użyciu konstruktorów statycznych, ponieważ środowisko uruchomieniowe może zoptymalizować wydajność typów, które nie mają jawnie zdefiniowanego konstruktora statycznego.

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

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 w ramach Microsoft Windows Development Series.

Zobacz też