EMZETT.
Login

Kurz: Public Sub New(name As String, alter As Integer) Me.Name = name Me.Alter = alter End Sub

Teil des Kurses Visual Basic .NET

Kapitel 4 von 8 im Kurs Visual Basic .NET. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

Klassen

Public Class Person
    Public Property Name As String
    Public Property Alter As Integer
    Private _geheim As Integer = 42
 
    Public Sub New(name As String, alter As Integer)
        Me.Name = name
        Me.Alter = alter
    End Sub
 
    Public Function IstVolljaehrig() As Boolean
        Return Alter >= 18
    End Function
 
    Public Overrides Function ToString() As String
        Return $"{Name} ({Alter})"
    End Function
 
    Public Shared Function Kind(name As String) As Person
        Return New Person(name, 5)
    End Function
End Class
 
Module Program
    Sub Main()
        Dim p As New Person("Mia", 17)
        Console.WriteLine(p)
        p.Alter = 18
        Console.WriteLine(p.IstVolljaehrig())
        Console.WriteLine(Person.Kind("Ben"))
        Dim q = New Person("Tom", 25) With {.Alter = 26}
        Console.WriteLine(q)
        Console.WriteLine(p Is q)
        Console.WriteLine(p.Equals(p))
    End Sub
End Module

Ausgabe:

Mia (17)
True
Ben (5)
Tom (26)
False
True

Me bezeichnet das aktuelle Objekt, Shared entspricht static, Property erzeugt Eigenschaften.

Vererbung und Polymorphie

Public MustInherit Class Tier
    Public ReadOnly Property Name As String
 
    Public Sub New(name As String)
        Me.Name = name
    End Sub
 
    Public Overridable Function Laut() As String
        Return "..."
    End Function
 
    Public Function Vorstellen() As String
        Return Name & " sagt " & Laut()
    End Function
End Class
 
Public Class Hund
    Inherits Tier
    Public Sub New(name As String)
        MyBase.New(name)
    End Sub
    Public Overrides Function Laut() As String
        Return "Wau"
    End Function
End Class
 
Public Class Katze
    Inherits Tier
    Public Sub New(name As String)
        MyBase.New(name)
    End Sub
    Public Overrides Function Laut() As String
        Return "Miau"
    End Function
End Class
 
Module Program
    Sub Main()
        Dim tiere As Tier() = {New Hund("Rex"), New Katze("Mimi")}
        For Each t In tiere
            Console.WriteLine(t.Vorstellen())
        Next
        Console.WriteLine(TypeOf tiere(0) Is Hund)
        Console.WriteLine(TypeOf tiere(1) Is Hund)
        Dim h As Hund = TryCast(tiere(0), Hund)
        Console.WriteLine(h IsNot Nothing)
        Console.WriteLine(tiere(1).GetType().Name)
    End Sub
End Module

Ausgabe:

Rex sagt Wau
Mimi sagt Miau
True
False
True
Katze

Interfaces und Strukturen

Public Interface IFlaeche
    Function Flaeche() As Double
End Interface
 
Public Class Kreis
    Implements IFlaeche
    Private ReadOnly r As Double
    Public Sub New(r As Double)
        Me.r = r
    End Sub
    Public Function Flaeche() As Double Implements IFlaeche.Flaeche
        Return Math.PI * r * r
    End Function
End Class
 
Public Class Rechteck
    Implements IFlaeche
    Private ReadOnly b, h As Double
    Public Sub New(b As Double, h As Double)
        Me.b = b : Me.h = h
    End Sub
    Public Function Flaeche() As Double Implements IFlaeche.Flaeche
        Return b * h
    End Function
End Class
 
Public Structure Punkt
    Public X As Integer
    Public Y As Integer
    Public Sub New(x As Integer, y As Integer)
        Me.X = x : Me.Y = y
    End Sub
    Public Overrides Function ToString() As String
        Return $"({X}, {Y})"
    End Function
End Structure
 
Public Enum Wochentag
    Montag = 1
    Dienstag
    Mittwoch
End Enum
 
Module Program
    Sub Main()
        Dim formen As IFlaeche() = {New Kreis(1.0), New Rechteck(3.0, 4.0)}
        For Each f In formen
            Console.WriteLine(f.Flaeche().ToString("F2"))
        Next
        Dim p As New Punkt(3, 4)
        Dim q = p
        q.X = 99
        Console.WriteLine(p.ToString() & " " & q.ToString())
        Console.WriteLine(Wochentag.Dienstag & " " & CInt(Wochentag.Mittwoch) & " " & [Enum].GetName(GetType(Wochentag), 1))
    End Sub
End Module

Ausgabe:

3.14
12.00
(3, 4) (99, 4)
2 3 Montag

Eigenschaften, Events und Delegates

Public Class Thermostat
    Private _temperatur As Double
    Public Event Ueberhitzt(grad As Double)
 
    Public Property Temperatur As Double
        Get
            Return _temperatur
        End Get
        Set(value As Double)
            _temperatur = value
            If value > 100 Then RaiseEvent Ueberhitzt(value)
        End Set
    End Property
End Class
 
Module Program
    Private WithEvents Messgeraet As New Thermostat()
 
    Private Sub Alarm(grad As Double) Handles Messgeraet.Ueberhitzt
        Console.WriteLine($"ALARM: {grad} Grad")
    End Sub
 
    Sub Main()
        Messgeraet.Temperatur = 50
        Messgeraet.Temperatur = 120
 
        Dim t As New Thermostat()
        AddHandler t.Ueberhitzt, Sub(g) Console.WriteLine("Lambda-Handler: " & g)
        t.Temperatur = 200
 
        Dim op As Func(Of Integer, Integer, Integer) = Function(a, b) a + b
        Dim aktion As Action(Of String) = Sub(s) Console.WriteLine("Aktion: " & s)
        aktion(op(3, 4).ToString())
    End Sub
End Module

Ausgabe:

ALARM: 120 Grad
Lambda-Handler: 200
Aktion: 7

Merke

  • Class, Inherits, MustInherit, Overridable/Overrides, MyBase, Me
  • Interface mit Implements; Structure ist ein Werttyp, Enum eine Aufzählung
  • Property mit Get/Set, Shared für statische Mitglieder
  • Events (Event, RaiseEvent, Handles, AddHandler) und Delegates (Func, Action)

Übungsaufgabe

Modelliere ein Konto mit Ereignis GuthabenGeaendert.

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Arrays, Listen, Dictionaries und LINQ

Weiter: Strings, Dateien, Datum und Fehler

Alle Kapitel: Visual Basic .NET im Überblick