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 ModuleAusgabe:
Mia (17)
True
Ben (5)
Tom (26)
False
TrueMe 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 ModuleAusgabe:
Rex sagt Wau
Mimi sagt Miau
True
False
True
KatzeInterfaces 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 ModuleAusgabe:
3.14
12.00
(3, 4) (99, 4)
2 3 MontagEigenschaften, 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 ModuleAusgabe:
ALARM: 120 Grad
Lambda-Handler: 200
Aktion: 7Merke
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)
Übungsaufgabe
Modelliere ein Konto mit Ereignis GuthabenGeaendert.
Quiz zur Selbstkontrolle
Wofür steht MustInherit?
- Die Klasse ist abstrakt und muss geerbt werden (richtig)
- Die Klasse erbt automatisch
- Die Klasse ist versiegelt
- Die Klasse ist öffentlich
Was bedeutet Me?
- Das aktuelle Objekt (wie this) (richtig)
- Der Benutzer
- Die Hauptklasse
- Eine Variable
Wie nennt man statische Mitglieder in VB?
- Shared (richtig)
- Static
- Global
- Const
Weiter im Kurs
Zurück: Arrays, Listen, Dictionaries und LINQ
Weiter: Strings, Dateien, Datum und Fehler
Alle Kapitel: Visual Basic .NET im Überblick