Zitat: |
Eine nicht-statische Klasse mit statischen Methoden, ist das 'erlaubt'? |
Ja es bedeutet nur das du von dieser Klasse weiterhin eine Instanz erzeugen kannst (du kannst
new benutzen). Bei der hier gezeigten Klasse macht das aber keinen Sinn hätte der Author also auch eher als statische Klasse machen sollen.
Zitat: |
Jetzt habe ich aber auch gelesen, dass solche Utility Klassen mit statischen Methoden lieber nicht angelegt werden sollen. Stimmt das? |
Man muss sie nur möglichst richtig einsetzen
In dem Beispiel geht es ja um die
Console Klasse und deren Write Methoden.
Console ist selbst eine statische Klasse und Write(Line) sind statische Methoden dieser Klasse. Das .Net Framework das du benutz ist bereits voll von statischen Klassen mit statischen Methoden (anderes Beispiel wäre die Math Klasse die in Beispielen auch gern verwendet wird)
Hätten die anders machen können und an anderen Stellen würde ich auch sagen ist der Einsatz manchmal fragwürdig bei
Console halte ich den Einsatz aber für nachvollziehbar. Es ist nicht schlecht das die
Console Klasse statisch ist.
Kurze Videokritik.
Er benutzt
using static Console um nicht überall
Console. vor die Write(Line) Methoden schreiben zu müssen. Ich würde dir raten dieses Feature erstmal vollständig zu ignorieren. Es verschleiert wo Methoden herkommen und macht Code undurchsichtig. Beim Lernen ist das glaube ich nicht hilfreich. Er hätte dann gleich in der Program.cs Datei auch
using static ConsoleUtils schreiben können dann wär das durcheinander perfekt (außer man weiß schon wie das Zeug funktioniert dann bräuchte man dieses Video aber nicht). Und übrigens auch wenn das ebenfalls das
static Schlüsselwort ist es bedeutet etwas völlig anderes. Schön wenn Schlüsselwörter auch noch Kontextabhängig sind. In der Kombination "
using static" gleich doppelt kontextabhängig. Ich glaube das ist im Video auch nirgendwo erwähnt. Es wird da einfach
static benutzt in einem Beispiel zu
static aber in einer ganz anderen Bedeutung als die die er erklären will
Er mischt in seiner "Utils" Klasse Methoden die man nicht zusammenpacken sollte oder die sinnlos sind da nicht wirklich wieder verwendbar. Ist halt nur Beispielcode. Ein Methode auszulagern die "Hello" ausgibt ist Unfug, vermutlich ist dir das auch bewusst. Der Rest der sich ums formatieren kümmert kann man so machen. Man sollte dann aber die reinen Mathefunktionen nicht dazu werfen.
Wen man statische Klassen/Methoden benutzt dann zumindest darauf achten sie thematisch auseinanderzuhalten und dann im Zweifel einfach mehrere anlegen. Dann werden die einzelnen Klassen zumindest einigermaßen wieder verwendbar. Das ist übrigens ein recht guter Maßstab. Wenn du eine Methode in einer statischen Klasse anlegst frag dich ob du die Methode auch so in einer ganz anderen Anwendung gebrauchen könntest. Dann ist die Wahrscheinlichkeit gegeben das du halbwegs richtig unterwegs bist. Dieses Video transportiert unterschwellig einfach alles auszulagern damit eine andere Klasse, hier die Programm Klasse, nicht zu komplex wird. Das ist sicher kein guter Maßstab und wieder dem geschuldet das das hier Beispielcode ist der die Verwendung von
static zeigt aber nicht wie man eine gute Applikation schreibt.
Moderiert von Th69: C#-Tags hinzugefügt