Properties vs. Konstruktoren
Eine Frage, die im Zusammenhang mit der aktuellen Webcastserie "Get the BASICs, VB.NET für Einsteiger und Umsteiger" aufkam, war, wie sich Properties von Konstruktoren abgrenzen.
Grundsätzlich dienen Properties dazu, Felder (Variablen) in einem Objekt kontrolliert setzen zu können indem sie die Ausführung von Code gestatten, wenn Eigenschaftenwerte festgelegt oder abgerufen werden.
Mit Konstruktoren können Objekte aus Klassen instanziieren werden – sie steuern die Erstellung von Objekten. Sind diese überladen vorhanden (mehrere Konstruktoren mit unterschiedlichen Parametern) können schon bei der Instanziierung eines Objekts bestimmte Objekteigenschaften gesetzt werden.
Zur Verdeutlichung ein kleines Beispiel:
Option Strict On
Option Explicit On
Module Module1
Sub Main()
Dim Daniel As New Person("Daniel", "Walzenbach", 1976)
Console.WriteLine(Daniel)
Console.WriteLine()
Dim Bernhard As New Person
Bernhard.Vorname = "Bernhard"
Bernhard.Nachname = "Frank"
Bernhard.Geburtsjahr = 2007
Console.WriteLine(Bernhard)
End Sub
End Module
Public Class Person
#Region "Variablen"
Private _Nachname As String
Private _Vorname As String
Private _Geburtsjahr As Integer
#End Region
#Region "Properties"
Public Property Nachname() As String
Get
Return _Nachname
End Get
Set(ByVal value As String)
_Nachname = value
End Set
End Property
Public Property Vorname() As String
Get
Return _Vorname
End Get
Set(ByVal value As String)
_Vorname = value
End Set
End Property
Public Property Geburtsjahr() As Integer
Get
Return _Geburtsjahr
End Get
Set(ByVal value As Integer)
' das Geburtsjahr überprüfen
If value <= System.DateTime.Now.Year Then
' alles ok
_Geburtsjahr = value
Else
' das Geburtsdatum darf nicht in der Zukunft liegen
Console.WriteLine("Das Geburtsdatum darf nicht in der Zukunft liegen.")
End If
End Set
End Property
#End Region
#Region "Konstruktoren"
Public Sub New()
End Sub
Public Sub New(ByVal Vorname As String, ByVal Nachname As String, ByVal Geburtsjahr As Integer)
Me.Vorname = Vorname
Me.Nachname = Nachname
Me.Geburtsjahr = Geburtsjahr
End Sub
#End Region
#Region "Methoden"
Public Overrides Function ToString() As String
Return String.Format("{0} {1}{2}Geburtsjahr: {3}" _
, _Vorname, _Nachname, System.Environment.NewLine _
, _Geburtsjahr)
End Function
#End Region
End Class
Referenzen:
Klasseneigenschaften, Felder und Methoden
Verwenden von Konstruktoren und Destruktoren
Schöne Grüße
Daniel