[HOW TO] Eigene Klassen erstellen, verwalten und verwenden

    • VB.NET

      [HOW TO] Eigene Klassen erstellen, verwalten und verwenden

      Hallo Community!

      Besonders für die Anfänger in VB.Net dürfte die Verwendung von Klassen interessant sein, da sich ohne Klassen schnell riesige und unübersichtliche Code-Haufen anhäufen. Die Arbeit mit Klassen erleichtert die Handhabung großer Datenmengen und ist dazu recht leicht zu verstehen und bequem.

      Hier werde ich euch nun anhand eines Beispiels zeigen, wie ihr eine Klasse erstellen, verwalten und verwenden könnt!
      Unser Ziel: Eine Eisdiele programmieren!

      1. Wie erstelle ich eine Klasse? Und inwiefern nützt mir eine Klasse etwas?

      Da wir eine Eisdiele programmieren wollen und das Eis an sich, welches verkauft werden soll, sehr verschieden sein kann, erstellen wir einfach eine Klasse, da wir ihr später viele Funktionen, Subs und Variablen geben können. - Denn es gibt nicht immer nur ein Eis, es kann variieren (Kugel/Becher, Schokolade/Erdbeer, Anzahl der Kugeln, etc...).

      Zuerst erstellen wir ein neues Projekt mit dem Namen "Eisdiele".
      Dazu erstellen wir eine Klasse mit Klick auf "Projekt" -> "Klasse Hinzufügen". Nennen wir sie einfach mal "Eis".
      Jetzt können wir auch in unserer Form1 ein Eis deklarieren, etwa mit:

      VB.NET-Quellcode

      1. Dim MeinEis As Eis

      Bis jetzt kann es noch nichts, das ändern wir aber noch!

      2. Wie verwalte ich eine Klasse und wie kann ich ihr Werte, Funktionen, etc. hinzufügen?

      Nun fügen wir unserem Eis bestimmte Werte zu:

      - Anzahl der Kugeln (als Integer)
      - In einem Becher? (als Boolean)
      - Eissorte (als Enum)
      - Name (als String)

      Integer, Boolean und String sollten bekannt sein. Der Variable "Eissorte" können wir, da es ein Enum ist, mehrere Werte zur Verfügung stellen und einen davon aussuchen. Die Werte nennen wir einfach mal "Schokolade", "Vanille" und "Erdbeer".

      Hier noch genaues zu dem Typ Enum:

      Spoiler anzeigen

      Eine Enum (Enumeration = Aufzählung) hat eine Reihe von Werten (hier Eissorten) zwischen denen ausgesucht werden kann.
      Wir deklarieren sie hier so:

      VB.NET-Quellcode

      1. Enum s_Eissorte
      2. Schokolade = 1
      3. Vanille = 2
      4. Erdbeer = 3
      5. End Enum
      6. Private m_Eissorte As s_Eissorte = s_Eissorte.Schokolade 'Hier "speichern" wir nun die Auswahl der Enum in einer Variable


      Da unsere Werte später von anderen Klassen (zum Beispiel der Form1) geändert werden können, nutzen wir "Property"s (Property = Eigenschaft), zuerst deklarieren wir aber unsere klassen-internen (privaten) Variablen von oben:

      VB.NET-Quellcode

      1. Public Class Eis
      2. Enum s_Eissorte
      3. Schokolade = 1
      4. Vanille = 2
      5. Erdbeer = 3
      6. End Enum
      7. Private m_Eissorte As s_Eissorte
      8. Private m_Kugeln As Integer
      9. Private m_Becher As Boolean
      10. Private m_Name As String
      11. End Class


      Nun setzen wir uns mit den Propertys auseinander: Eine Property (zum Beispiel "Name") kann einen oder mehrere Werte (zum Beispiel "m_Name) abrufen und/oder festlegen.
      Dies funktioniert so:

      VB.NET-Quellcode

      1. Public Property Name As String 'Unsere Eigenschaft ist öffentlich, da sie auch zugänglich sein soll. Und sie ist nicht ReadOnly, also auch änderbar
      2. Get 'Die Get-Klausel gibt den angegebenen Wert zurück, hier "m_Name".
      3. Return m_Name
      4. End Get
      5. Set(ByVal value As String) 'Die Set-Klausel gibt es bei ReadOnly-Propertys nicht, da Set einen Wert ändert.
      6. m_Name = value
      7. End Set
      8. End Property


      Nun werdet ihr in eurer "Form1" auch sehen, dass ihr jetzt die Eigenschaft "Name" von dem deklarierten "MeinEis" ändern und abrufen könnt.
      Dies tut ihr auch mit den restlichen Variablen - Achtung bei der Eissorte! Hier gebt ihr bei dem Typen der Property (As ...) nicht "Enum" sondern "s_Eissorte" an, da ihr lediglich die Werte der Eissorte verfügbar haben wollt und es ansonsten nicht funktioniert und nicht sinnvoll ist ;).

      Wir haben nun eine Klasse, die unsere Bedüfrnisse stillt - Nicht ganz! Denn noch sind unsere Variablen leer, wenn wir sie nicht alle einzeln Zeile für Zeile festlegen. Dafür gibt's allerdings den "New"-Sub. Den nutzen wir bei der Instanzierung (bei der Deklarierung), um unseren Variablen einen Wert zu geben. Und zwar über Parameter.
      Dazu erstellen wir einfach den Sub "New" und geben unsere Parameter direkt an, etwa so:

      VB.NET-Quellcode

      1. Public Sub New(ByVal p_Eissorte As s_Eissorte, ByVal p_Kugeln As Integer, ByVal p_Becher As Boolean, ByVal p_Name As String)


      Noch haben wir diesen Parametern keine Aktion zugeschrieben, das tun wir jetzt: Wir übergeben unseren privaten Variablen den Wert der Parameter:

      VB.NET-Quellcode

      1. m_Eissorte = p_Eissorte
      2. m_Kugeln = p_Kugeln
      3. m_Becher = p_Becher
      4. m_Name = p_Name


      Nun haben wir auch keine leeren Variablen mehr in unserer Klasse. Wenn wir unsere Klasse nun verwenden, müssen wir ihr aber auch die Werte übergeben, das tun wir, in dem wir unser Eis normal (as Eis) deklarieren und ihm den Wert eines neuen Eises mit Parametern übergeben, etwa so:

      VB.NET-Quellcode

      1. Dim MeinEis As Eis = New Eis(s_Eissorte.Vanille, 2, True, "Vanilla At Dinner") 'Ein bisschen kitschig ;)

      Jetzt können wir unsere Klasse schon verwenden! Und wie ihr auch vom "normalen" Programmieren her wisst, so könnt ihr auch innerhalb einer Klasse Funktionen, Subs und weiteres verwenden!

      3. Wie kann ich mein Eis nun verwenden?

      Sicherlich gibt es viele Methoden, Klassen zu verwenden - Ich bevorzuge eine List(Of), die eine sehr bequem bedienbare Liste darstellt. Sie stellt eine Liste mit vordefiniertem Typen dar, d.H. wir müssen ihr noch sagen, welchen Typ von Werten sie verwalten soll - In unserem Falle ist das "Eis". Und so stellen wir das an:

      VB.NET-Quellcode

      1. Dim MeineKuehltruhe As New List(Of Eis)


      Ähnlich wie eine ComboBox seine Einträge und eine ListView seine Zeilen behandelt, funktioniert es bei der Liste auch, und zwar durch "Items", die durch einen (nullbasierten) Index angegeben werden.

      Wenn wir unserer Liste "MeineKuehltruhe" nun ein Eis hinzufügen möchten, so können wir das so tun:

      VB.NET-Quellcode

      1. MeineKuehltruhe.Add(New Eis(Eis.s_Eissorte.Vanille,2,True,"Vanilla For Dinner"))


      Nun hätten wir 1 Eintrag in unserer Liste und dieser hat (da der Index nullbasiert ist) die Nummer 0. Der zweite Eintrag hätte dann die Nummer 1, der dritte die 2 und so weiter ;).

      Mit einer solchen Liste können wir auch ganz bequem zum Beispiel eine Listview füllen.
      Nehmen wir an, wir haben eine ListView namens "MeineListe", welche 4 Spalten hat (für jede Eigenschaft unseres Eises eine) und dessen "View" auf "Details" steht (um auch die Spalten anzuzeigen). Dieser ListView möchten wir jetzt alle Einträge unserer Liste hinzufügen. Das ginge dann in etwa so:

      VB.NET-Quellcode

      1. MeineList.Items.Clear() 'Erst alle EInträge löschen
      2. For Each EinzelEis As Eis In MeineKuehltruhe 'Für jedes Eis in unserer Liste...
      3. With MeineList
      4. .Items.Add(EinzelEis.Eissorte.ToString) 'Spalte 1: Eissorte
      5. .Items.Item(.Items.Count - 1).SubItems.Add(EinzelEis.Kugeln) 'Spalte 2: Anzahl der Kugeln
      6. .Items.Item(.Items.Count - 1).SubItems.Add(EinzelEis.Becher) 'Spalte 3: Becher?
      7. .Items.Item(.Items.Count - 1).SubItems.Add(EinzelEis.Name) 'Spalte 4: Name des Eises
      8. End With
      9. Next


      Zum Nachschauen und Anfassen habe ich euch noch ein kleines GUI gebastelt, in dem ihr euch das ganze anschauen und damit herumspielen könnt - Der SourceCode ist auch im Anhang mit dabei!

      Ich hoffe, ich konnte den Anfängern unter uns das Thema "Klassen? Was ist das, kann ich das essen?" etwas näher bringen!

      MfG,
      X-Zat / Momo

      PS: Dieses Tutorial ähnelt dem Beispiel aus dem Galileo Openbook. Vor einiger Zeit habe ich mich dort mit dem Thema Klassen auseinandergesetzt, es dort erlernt und wurde von diesem Tutorial inspiriert, auch hier selbst eines zu schreiben.
      Dateien
      • Eisdiele.rar

        (45,09 kB, 1.674 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „X-Zat“ ()