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 ModuleMia (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 ModuleRex 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 Module3.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 ModuleALARM: 120 Grad Lambda-Handler: 200 Aktion: 7
Merke
Class,Inherits,MustInherit,Overridable/Overrides,MyBase,MeInterfacemitImplements;Structureist ein Werttyp,Enumeine AufzählungPropertymitGet/Set,Sharedfür statische Mitglieder- Events (
Event,RaiseEvent,Handles,AddHandler) und Delegates (Func,Action)
Aufgabe
Modelliere ein Konto mit Ereignis GuthabenGeaendert.