Udostępnij za pośrednictwem


Wirtualne składowe

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.

Wirtualne elementy członkowskie można przesłonić, zmieniając zachowanie podklasy. Są one dość podobne do wywołań zwrotnych pod względem rozszerzalności zapewnianej, ale są one lepsze pod względem wydajności wykonywania i zużycia pamięci. Ponadto wirtualne elementy członkowskie czują się bardziej naturalne w scenariuszach, które wymagają utworzenia specjalnego rodzaju istniejącego typu (specjalizacji).

Wirtualne elementy członkowskie działają lepiej niż wywołania zwrotne i zdarzenia, ale nie działają lepiej niż metody inne niż wirtualne.

Główną wadą elementów członkowskich wirtualnych jest to, że zachowanie wirtualnego elementu członkowskiego można modyfikować tylko w czasie kompilacji. Zachowanie wywołania zwrotnego można zmodyfikować w czasie wykonywania.

Wirtualne elementy członkowskie, takie jak wywołania zwrotne (a może więcej niż wywołania zwrotne), są kosztowne do projektowania, testowania i konserwacji, ponieważ każde wywołanie wirtualnego elementu członkowskiego może zostać zastąpione w nieprzewidywalny sposób i może wykonać dowolny kod. Ponadto w celu jasnego zdefiniowania kontraktu wirtualnych elementów członkowskich wymagane jest znacznie więcej wysiłku, więc koszt projektowania i dokumentowania ich jest wyższy.

❌ NIE należy tworzyć wirtualnych członków, chyba że masz dobry powód, aby to zrobić i wiesz o wszystkich kosztach związanych z projektowaniem, testowaniem i konserwowanie wirtualnych elementów członkowskich.

Wirtualne elementy członkowskie są mniej forgiving pod względem zmian, które można wprowadzić do nich bez przerywania zgodności. Ponadto są one wolniejsze niż niewirtualne elementy członkowskie, głównie dlatego, że wywołania do wirtualnych członków nie są podkreślone.

✔️ ROZWAŻ ograniczenie rozszerzalności tylko do tego, co jest absolutnie niezbędne.

✔️ Preferuj dostęp chroniony za pośrednictwem publicznych ułatwień dostępu dla wirtualnych członków. Publiczne elementy członkowskie powinny zapewnić rozszerzalność (jeśli jest to wymagane) przez wywołanie chronionego wirtualnego elementu członkowskiego.

Publiczne elementy członkowskie klasy powinny zapewnić odpowiedni zestaw funkcji dla bezpośrednich odbiorców tej klasy. Wirtualne elementy członkowskie są zaprojektowane tak, aby były zastępowane w podklasach, a chronione ułatwienia dostępu to doskonały sposób określania zakresu wszystkich wirtualnych punktów rozszerzalności, w których można ich używać.

© 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ż