Referenz - PROPERTY
Syntax A:
TYPE TypeName
FeldName [(Indizes)] AS DatenTyp
' Wert abfragen
DECLARE PROPERTY PropertyName [( [ BYREF | BYVAL ] Index AS DatenTyp)] AS DatenTyp
' Wert setzen
DECLARE PROPERTY PropertyName ([ [ BYREF | BYVAL ] Index AS DatenTyp, ] _
[ BYREF | BYVAL ] NeuerWert AS DatenTyp )
END TYPE
Syntax B:
PROPERTY TypeName.PropertyName [ (Parameterliste) ] [ AS DatenTyp ]
' Anweisungen
END PROPERTY
Typ: Anweisung
Kategorie: Klassen
PROPERTY erstellt eine Property einer Klasse. Dieses Schlüsselwort ist nur zulässig, wenn mit der Kommandozeilenoption -lang fb compilliert wird.
Eine Property kann mit einem UDT-Attribut gleichgesetzt werden; jedoch wird bei jedem Zugriff auf dieses Attribut ein benutzerdefiniertes Unterprogramm aufgerufen. Informieren Sie sich zuerst über Prozeduren in FreeBASIC, bevor Sie sich mit dem Thema Properties und Klassen befassen. Siehe dazu auch SUB, FUNCTION.
Ebenso nötig sind Kenntnisse über UDTs.
- 'TypeName' ist der Name eines UDTs, wie er unter TYPE (UDT) erklärt wird.
- 'Indizes' zeigt an, dass auch Arrays verwendet werden können; wie üblich ist die Anzahl der Dimensionen in diesem Fall aber fest.
- 'FeldName' ist der Name eines UTD-Attributs. Mindestens ein solches Attribut muss existieren, um eine Property einzufügen. Es dürfen selbstverständlich auch mehrere Attribute verwendet werden.
- 'PropertyName' ist der Name der Property; dieser Bezeichner wird auch verwendet, um das Unterprogramm zu identifizieren, das beim Zugriff auf die Property aufgerufen wird. 'PropertyName' darf auch überladen werden, d. h. es dürfen mehrere Property-Prozeduren mit demselben Bezeichner existieren, die sich dann durch ihre Parameterliste unterscheiden müssen. Überladene Properties sind z. B. dann nötig wenn der Wert einer Property vom User gesetzt und abfragt werden soll.
- 'NeuerWert' ist ein Wert, der an die Speicherstelle der Property übergeben werden soll. Er wird an das Unterprogramm übergeben und dort abhängig von den 'Anweisungen' bearbeitet.
- 'Index' wird z. B. verwendet, wenn das über die Property geänderte Attribut ein Array ist. Über diesen Parameter kann der Index des Feldelements angegeben werden. Es ist auch möglich, hier andere Parameter zu übergeben, z. B. einen Pointer auf eine ganze Struktur von Parametern.
- 'Parameterliste' ist eine Parameterliste, die den Parametern in Syntax A entspricht.
- 'Anweisungen' ist ein Programmcode, der den Regeln einer FUNCTION folgt. Ein Rückgabewert kann mit PROPERTY, 'TypeName.PropertyName' und RETURN gesetzt werden.
PROPERTY-Felder werden dazu genutzt, um auf Werte innerhalb eines UDTs zuzugreifen und bei jedem Zugriff eine bestimmte Prozedur aufzurufen.
So, wie Sie den Wert eines UDT-Attributs setzen und abfragen können, können auch Properties gesetzt und abgefragt werden. Die zugehörigen Prozeduren haben dabei denselben Bezeichner; sie unterscheiden sich lediglich durch die Anzahl der Parameter.
Innerhalb der Property kann auf die übrigen Attribute des zugeordneten UDTs über das Schlüsselwort THIS zugegriffen werden.
Bei der Bearbeitung der Attribute des UDTs mit mathematischen Operatoren (+, -, ...) kann das Prinzip "Operator Overloading" angewandt werden; siehe hierzu OPERATOR.
Beispiel: Abfragen und Setzen von Werten eines UDTs mittels Properties
Type Vector2D
As Single x, y
Declare Operator Cast() As String
Declare Property Length() As Single
Declare Property Length( ByVal new_length As Single )
End Type
Operator Vector2D.CAST () As String
Return "(" & x & ", " & y & ")"
End Operator
Property Vector2D.Length() As Single
Length = Sqr( x * x + y * y )
End Property
Property Vector2D.Length( ByVal new_length As Single )
Dim m As Single = Length
If m <> 0 Then
'' neuer_Vektor = alter_Vektor / laenge * neue_laenge
x *= new_length / m
y *= new_length / m
End If
End Property
Dim a As Vector2D = ( 3, 4 )
Print "a = "; a
Print "a.Length = "; a.Length
Print
a.Length = 10
Print "a = "; a
Print "aLength = "; a.Length
Sleep
Ausgabe:
a = (3, 4)
a.Length = 5
a = (6, 8)
a.Length = 10
Mittels der Schlüsselwörter PRIVATE und PUBLIC kann festgelegt werden, von welchen Programmpunkten aus auf bestimmte Attribute des UDTs zugegriffen werden darf. Damit kann erreicht werden, dass bestimmte Attribute nicht direkt, sondern nur über die bereitgestellten Properties gesetzt oder ausgelesen werden können. Die Property kann dann beispielsweise Zugriffsbeschränkungen wie Arraygrenzen überprüfen. Siehe dazu auch das Codebeispiel Zugriffskontrolle über Properties.
Unterschiede zu QB:
Properties und Methoden existieren nur in VisualBASIC, jedoch existiert dort keine Möglichkeit, solche selbst zu erstellen.
Unterschiede zu früheren Versionen von FreeBASIC: existiert seit FreeBASIC v0.17
Siehe auch:
TYPE (UDT), SUB, FUNCTION, OPERATOR, THIS, PUBLIC, PRIVATE, Objektorientierung
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|