LSP bezieht sich auf die Übergabe einer Instanz einer Klasse an eine Methode, wobei die Methode einige Aufgaben mit dieser Instanz ausführt und häufig eine Art Ergebnis liefert. Dies spielt für statische Klassen keine Rolle, da Sie in C # keine Instanz einer statischen Klasse erstellen können.
Noch wichtiger ist, dass statische Klassen versiegelt sind und daher nicht vererbt werden können. Damit ist Ihre Frage in C # umstritten.
Sie können sagen, dass statische Klassen immer LSP-kompatibel sind, da Sie niemals eine Unterklasse erstellen können, die gegen dieses Prinzip verstößt. Sie können auch sagen, dass statische Klassen aus demselben Grund niemals LSP-kompatibel sind.
In Java unterscheiden sich statische Klassen geringfügig. Sie können eine Klasse der obersten Ebene nicht als "statisch" markieren. Wenn Sie also eine Dienstprogrammklasse erstellen möchten, die den statischen Klassen von C # ähnelt, müssen Sie sie als deklarieren
final
und ihren Konstruktor ausblenden. Sobald Sie dies tun, verhalten sie sich jedoch ähnlich wie in C # - Sie können sie weder instanziieren noch in Unterklassen unterteilen. Sie können eine innere Klasse als deklarieren
static
, aber das bedeutet nicht dasselbe wie in C #: Es bezeichnet einfach eine
verschachtelte Klasse der obersten Ebene .
VB.NET verhält sich in diesem Fall meines Wissens genauso wie C #.
Sie haben nicht erwähnt, ob Sie an den anderen Grundsätzen interessiert sind, aber der Vollständigkeit halber werde ich sie trotzdem einbeziehen.
S ingle Verantwortung Prinzip : eine statische Klasse leicht folgt diesem Prinzip.
O pen / closed-Prinzip : Da statische Klassen versiegelt sind, können sie diesem Prinzip niemals folgen.
L iskov Substitutionsprinzip : wie oben.
I nterface Segregation Prinzip : gilt nicht für eine einzige Klasse, aber Splitting einer große statische Klasse in kleinere, spezialisiertere Richtung nach diesem Prinzip ein Schritt sein könnte.
D Prinzip der Ependenzinversion : Statische Klassen können keine Interfaces implementieren, daher hängt jede Klasse, die sie verwendet, immer von der jeweils vorhandenen Implementierung ab. Statische Klassen verletzen daher dieses Prinzip.
Da statische Klassen nicht alle 5 Kriterien erfüllen, sind sie nicht SOLID.