Joa, so im Prinzip denke ich passt das Beispiel.
Eigentlich passt so ziemlich alles.
Ein Fernseher ist und bleibt ein Fernseher, egal ob er nun groß oder klein ist, flach oder ein Röhrenbildschirm. Die Klasse muss den Objekten nur diese Freiheiten ermöglichen. Wenn in dieser Klasse eine feste Größe vorgegeben ist, dann lässt die sich auch nicht ändern, aber dann könnte z.B. die Geschwindigkeit, mit der das Bild aktualisiert wird, variabel sein und so unterschiedliche Fernseher ermöglichen.
Aber auch wenn die Eigenschaften exakt gleich sind, sind es immer noch zwei verschiedene Objekte.
Stell dir mal vor, man könnte einen Gegenstand nach dem Vorbild eines anderen Gegenstandes exakt nachbauen. Es existiert wirklich überhaupt kein Unterschied, nicht im kleinsten Detail. Sie sind absolut gleich.
Dennoch sind es nicht die selben Gegenstände. Sie haben zwar die gleichen Eigenschaften, aber trotzdem kannst du beide anfassen und siehst zwei Stück.
Das ist wichtig, dass du das verstehst. Ein Objekt ist immer einzigartig, völlig egal wie die Eigenschaften sind. Da kannst du das eine Objekt komplett bis ins kleinste Detail kopieren, dennoch hast du ein zweites Objekt, das unabhängig vom Ersten ist.
Und die Klasse ist dabei die Schablone, die das Schema darstellt, wie diese Objekte aussehen.
Das hat den Vorteil, dass eine Methode bei einem Objekt, das nach einer bestimmten Klasse als Typ geschaffen wurde, davon ausgehen kann, dass Methoden und Eigenschaften immer vorhanden sind. Was in der Eigenschaft steht, oder was passiert, wenn die Methode ausgeführt wird, steht auf einem anderen Blatt. Wichtig ist: Sie sind da und bleiben auch da, völlig egal, welches Objekt.
Klassen erkennst du im Übrigen in Visual Studio an der
Farbe. Die Compilertypen (
Farbe) haben alle ein Gegenstück als Klasse. Die findest du, indem du einfach mal ein bisschen googlest, die MSDN-Doku sollte da genügend Informationen bieten.
Die Klasse Console stellt (wie der Name schon sagt) die Konsole dar, in der du Text ausgeben lassen kannst.
Dort kannst du die Eigenschaften verändern und die Konsole agieren lassen.
Doch hier ist sie keine Schablone, denn diese Klasse ist statisch, was bedeutet, dass keine Objekte davon erstellt werden können. Hier ist die Klasse Console wohl mehr zur Übersichtlichkeit gedacht. Jeder, der etwas mit der Konsole machen will, sucht die nötigen Funktionen in der Klasse, die die Konsole darstellt, nämlich Console.
Dennoch kann diese Klasse Eigenschaften haben, allerdings gelten sie immer und global, da sie fest an die Klasse gebunden sind. Lässt die Klasse zu, dass sie geändert werden, dann kann man sie ändern, wenn nicht, dann nicht. Aber sie können nur über die Klasse direkt geändert werden, denn Objekte sind nicht möglich.
PS zum Code:
Ich glaub, im Code-Feld kann nicht formatiert werden, aber ich weiß, was du meinst.
Hier darfst du aber nicht nach einem sinnvollen Grund suchen, das so zu lösen, denn da suchst du ewig. Das dient nur dazu, zu verstehen, wie man sie verwendet und wie sie arbeiten, diese Klassen.
Wahrscheinlich wirst du das mit der Zeit schon noch verstehen, wenn du etwas mehr Klassen gesehen haben.
Du kannst zur Übung ja mal eine Klasse Auto schreiben. Sie muss nicht funktionieren, schreib in jede Methode einfach als Kommentar rein, was sie können muss und schreibe folgendes dazu, damit der Compiler keinen Fehler mehr wirft:
C#-Quelltext
1:
| throw new NotImplementedException(); |
Das wirft einen Fehler aus und wenn du irgendwo eine Methode aufrufst, wo das steht, dann würde das Programm abbrechen, sobald es diesen Punkt erreicht hat. Aber das ist erst einmal unwichtig, das dient nur, damit die nirgendwo irgendwelche Fehler sind, wenn ein Rückgabewert fehlt.
Was allerdings wichtig ist, ist, dass du dir mal vor Augen führst, was ein Auto aus macht. Denke nicht zu komplex und bilde ein ganzes Auto dar, das wird zu viel, aber große Eckpfeiler, wie man ein Auto erkennt und was es aus macht, kannst du ruhig schreiben.
Schreibe z.B. für die PS-Zahl folgendes:
C#-Quelltext
1:
| public int Pferdestärke { get; private set; } |
Das ist eine Eigenschaft. Wenn du das noch nicht kennst, wirst du garantiert noch kennen lernen.
Zur Verwendung: Schreibst du vor das get ein private, dann kann niemand den Wert lesen. Lässt du das private vor dem set, kann ihn niemand verändern. Lässt du beides weg, ist auch beides möglich. Entscheide, was sinnvoll ist.
Ich habe hier ein private vor dem set geschrieben, weil die PS ja in der Regel nicht mehr zu ändern sind.
Aber du könntest schreiben:
C#-Quelltext
1:
| public int TankStand { get; set; } |
Gibt den Stand an, wie voll der Tank ist. Das kann man ablesen oder ändern, indem man tanken geht.
Entscheide aber auch, was das Auto können soll. Es soll fahren können, also schreib eine Methode Fahren.
Oder du möchtest, dass man den Tank nicht einfach so simpel ändern kann, also mach set private und schreib eine Methode Tanken, die dann intern den Tank verändert.
Als vorläufige Klasse:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| class Auto { public int Pferdestärke { get; private set; } public int TankStand { get; private set; }
public void Fahren(int Geschwindigkeit) { } public void Tanken(int AnzahlLiter) { } } |
Schreib noch mehr dazu, bis sie komplex ist, du aber noch den Überblick hast. Dann schau mal, was dann aus der Klasse geworden ist.