Programmierprinzipien: Readonly Property oder Function? [VB.Net]

Shakie

Erfahrenes Mitglied
Hallo!
Wenn ich eine eigene Klasse erstelle, dann kann ich dieser eine Property geben.
Zum Beispiel:
Code:
Class A
          Private VariableB As Object
          Public Property B() As Object
              Get
                  Return VariableB
              End Get
              Set(ByVal value As Object)
                  VariableB = value
              End Set
          End Property
End Class
Ich könnte die Variable "B" aber auch einfach als Public definieren:
Code:
Class A
          Public B As Object
End Class
Meine Frage: Wann soll ich eine Property verwenden und wann soll ich die Variable einfach als Public definieren?
Das gleiche gilt für Readonly-Properties: statt dessen könnte man ja auch eine Function verwenden.
Wenn mir jemand das Prinzip erklärt, wann man was verwenden soll, wäre das sehr nett!
 
Hallo Shakie,

Properties sind wie der Name schon sagt Eigenschaften, wie z.B. die Katze ist weiß, oder der Hund ist braun.
Methoden sind eher Aktionen Bsp. Hund.GibLaut() oder Katze.Miau().
Die Oop gibt vor Felder (Klassenvariablen) immer private zu deklarieren und Properties dafür zu benutzen,. da jede Klasse eine Einheit für sich bilden soll. Sprich sie soll unabhängig von anderen Klassen bzw Programmen eingesetzt werden können.

Nehmen wir mal an Sie erstellen eine Klasse namens Vierbeiner, wo der Name dieser in einem public String, deklariert auf der Klassenebene gespeichert werden soll.
Code:
Public Class Vierbeiner 
 Public Name As String 
End Class

Benutzen der Klasse:
Code:
Vierbeiner.Name = "Bello"
Nehmen wir ebenfalls mal an Sie erstellen eine Version 2 dieser Klasse, wo sich herausstellt das dass Speichern in einer Datenbank effizienter wäre.
Spätestens jetzt hätten Sie ein Problem wenn sie keine Properties, wie in diesem Fall, benutzt hätten.
In einem Property können Sie bestimmen was mit diesem Wert passiert. Sie können es speichern wo sie wollen und der Client der Ihre Klasse benutzt wird davon nichts merken.
Sie können auch durch das weglassen eines Accessoren bestimmen ob der Wert überhaupt gesetzt bzw gelesen werden kann/soll.

Readonly Members können nur im Konstruktor initalisiert werden.

Das ist wirklich ein Thema was zur Basis der Oop gehört und Sie sollten sich erst richtig einarbeiten.
 
Nehmen wir ebenfalls mal an Sie erstellen eine Version 2 dieser Klasse, wo sich herausstellt das dass Speichern in einer Datenbank effizienter wäre.
Spätestens jetzt hätten Sie ein Problem wenn sie keine Properties, wie in diesem Fall, benutzt hätten.
Naja eigentlich hab ich kein Problem. Ich deklariere halt eine Property "Name" und lösche die Public-Variable "Name". Den Compiler stört das nicht, das "Name" früher eine Variable war und jetzt eine Property ist.

Readonly Members können nur im Konstruktor initalisiert werden.
Das ist mir schon klar. Was ich meine ist folgendes:
Diese Klasse hier:
Code:
Public Class Vierbeiner
Private strName As String
  Public Sub New(byval Name as String)
    strName=Name
  End Sub

  Public Readonly Property Name As String
  Get
    Return strName
  End Get
  End Property
End Class
Könnte ich doch theoretisch auch so schreiben:
Code:
Public Class Vierbeiner
Private strName As String
  Public Sub New(byval Name as String)
    strName=Name
  End Sub

  Public Function Name As String
    Return strName
  End Function
End Class
 
Zuletzt bearbeitet:
Dann korrigiere ich mich:
Die Klasse Vierbeiner ist von einem Drittanbieter die Sie nicht ändern können.
Das ist in der Oop nun mal das Prinzip der Kapselung.

Gruß ikays.
 

Neue Beiträge

Zurück