Więc chciałem odziedziczyć sealed class
po csharp i zostałem spalony. Po prostu nie ma możliwości jej odblokowania, chyba że masz dostęp do źródła.
Wtedy pomyślałem sobie „dlaczego w sealed
ogóle istnieje?”. 4 miesiące temu. Nie potrafiłem tego rozgryźć, mimo że czytałem o nim wiele rzeczy, takich jak:
- Jon Skeet życzy sobie „ zajęcia były domyślnie zapieczętowane w .NET ”.
- Wolisz kompozycję niż dziedziczenie?
- „Nie należy zapieczętowywać wszystkich klas (...)”
- Jak kpisz z zapieczętowanej klasy?
Od tego czasu próbowałem to wszystko przetrawić, ale dla mnie to po prostu za dużo. W końcu wczoraj spróbowałem jeszcze raz. Ponownie przejrzałem je wszystkie oraz kilka innych:
- Dlaczego klasa powinna być czymś innym niż „abstrakcyjnym” lub „ostatecznym / zapieczętowanym”?
- W ciągu ponad 15 lat programowania, po raz pierwszy usłyszałem o SOLID , w odpowiedzi na pytanie już powiązane i oczywiście nie przeczytałem go wszystkie 4 miesiące temu
W końcu, po wielu zastanawiać, zdecydowałem się mocno zmieniać oryginalnego pytanie w oparciu o nowy tytuł.
Stare pytanie było zbyt szerokie i subiektywne. Zasadniczo pytano:
- W starym tytule: Jeden dobry powód, aby używać zapieczętowanego
- W ciele: jak poprawnie zmodyfikować zapieczętowaną klasę? Zapomniałeś o spadku? Używać kompozycji?
Ale teraz, rozumiejąc (czego nie wczoraj), że wszystko sealed
robi, zapobiega dziedziczeniu , a my możemy i powinniśmy używać kompozycji zamiast dziedziczenia , zdałem sobie sprawę, że potrzebowałem praktycznych przykładów.
Wydaje mi się, że moje pytanie jest (a właściwie zawsze było) dokładnie tym, co zaproponował mi pan na czacie : Jak projektowanie dziedziczenia może powodować dodatkowe koszty?