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