LSP ma zastosowanie do przekazywania instancji klasy do metody, dzięki czemu metoda wykonuje pewne czynności z tą instancją i często daje pewien wynik. Nie ma to znaczenia dla klas statycznych, ponieważ w języku C # nie można utworzyć instancji klasy statycznej.
Co ważniejsze, klasy statyczne są zapieczętowane i dlatego nie można ich dziedziczyć. To sprawia, że twoje pytanie jest dyskusyjne w miarę C #.
Można powiedzieć, że klasy statyczne są zawsze zgodne z LSP, ponieważ nigdy nie można stworzyć podklasy, która naruszałaby tę zasadę. Można również powiedzieć, że klasy statyczne nigdy nie są zgodne z LSP z tego samego powodu.
W Javie klasy statyczne są nieco inne. Nie możesz oznaczyć klasy najwyższego poziomu jako „statycznej”, więc jeśli chcesz utworzyć klasę użyteczności podobną do klas statycznych C #, musisz zadeklarować ją jako
final
i ukryć jej konstruktor. Gdy to zrobisz, zachowują się one podobnie do C # - nie możesz ich utworzyć ani podklasować. Możesz zadeklarować klasę wewnętrzną jako
static
, ale to nie znaczy tego samego, co w C #: po prostu oznacza
zagnieżdżoną klasę najwyższego poziomu .
W tym przypadku VB.NET zachowuje się dokładnie tak samo jak C #, o ile wiem.
Nie wspomniałeś, czy interesują Cię inne zasady, ale i tak je uwzględnię, aby uzyskać kompletność.
S Ingle zasada odpowiedzialności : klasa statyczna łatwo śledzić tę zasadę.
O długopis / zasada zamknięta : ponieważ klasy statyczne są zapieczętowane, nigdy nie mogą przestrzegać tej zasady. Zasada podstawienia
L iskova : jak wyżej.
I zasada nterface segregacja : nie stosuje się do jednej klasy, ale dzielenie jedna duża klasa statyczna na mniejsze, bardziej wyspecjalizowane te mogłyby być krokiem w kierunku przestrzega tej zasady.
D Zasada inwersji zależności : klasy statyczne nie mogą implementować interfejsów, więc każda klasa, która go używa, zawsze będzie zależeć od tego, co istnieje w danym momencie. Klasy statyczne naruszają zatem tę zasadę.
Ponieważ klasy statyczne nie spełniają wszystkich 5 kryteriów, nie są SOLIDNE.