Skyrim:Property Reference

Aus Skript-Wiki
Wechseln zu: Navigation, Suche

Eine Property ist ein Paar von Funktionen (oder, manchmal, nur einer), die so aussehen und sich so verhält wie eine Art Variable. Man kann von ihr einen Wert lesen, ihr einen neuen Wert zuweisen, eben wie bei einer Art Variablen, vorausgesetzt es ist erlaubt. Es gibt drei Arten von Properties, die Full Property, die Auto-Property und die Auto-Read-Only-Property. Alle drei erscheinen einem externen Script gleich. Man kann sie sich als Art Public Variablen vorstellen, wobei das Script, dem sie gehören, kontrollieren kann, wie sie genutzt werden.

Full Property

<property> ::= <type> 'Property' <identifier> <flags>
                 <function>
                 [<function>]
               'endProperty'

Die Full Property gibt dir die komplette Kontrolle über das, was die Property genau tut und was sie erlaubt oder nicht. Die Funktionen innerhalb der Propertydefinition sind normale Funktionen mit der Einschränkung, dass sie entweder eine “Get”-Funktion sind (die den selben Typ wie die Property hat und keine Parameter hat) oder eine “Set”-Funktion (die nichts zurück gibt und einen einzelnen Parameter vom Typ der Property aufnimmt. Eine von beiden funktionen kann weg gelassen werden, mindestes eine muss aber existieren.


Wenn jemand der Property einen Wert zuweist, wird die Set-Funktion aufgerufen, um den gewünschten Wert aufzunehmen. Wenn jemand versucht, den Wert zu bekommen, den die Property hält, wird die Get-Funktion aufgerufen und man bekommt das Ergebnis. Wenn die Set-Funktion nicht existiert, kann auf die Property nicht geschrieben werden. Wenn die Get-Funktion nicht existiert, kann von der Property nicht gelesen werden.

Wenn die Property im Editor angezeigt werden soll, muss sie mindestens eine Set-Funktion haben. Sie darf kein Hidden- Hidden- Flag haben.

Beispiel

<tesscript> int myValue = 0 ; Private, wie alle Variablen int Property ValueProperty ; Public zugreifbar, aber verhindert,

                          ; dass eine Wert kleiner 0 gesetzt wird
 Function Set(int newValue)
   if newValue >= 0
     myValue = newValue
   endIf
 EndFunction
 int Function Get()
   return myValue
 EndFunction

EndProperty </source>
<source lang="papyrus"> int myValue = 0 ; Private int Property ReadOnlyValue ; Public zugreifbar,kann nicht gesetzt werden

 int Function Get()
   return myValue
 EndFunction

EndProperty </tesscript>


Auto-Property

<auto property> ::= <type> 'Property' <identifier> ['=' <constant>] 'Auto' <flags>

Eine Auto-Property ist für alle Ziele und Zwecke eine Public Variable. Sie erzeugt eine versteckte Variable und versteckte Get- und Set-Funktionen zu ihrer Manipulation, so dass man es nicht selbst machen muss. Optional kann sie mit einen mit einem Wert initialisieren. Dazu wird die gleiche Syntax wie bei einer Object-Variable genutzt. (Es gibt auch einige intene Optimierungen, die diese Art von Property effizienter machen als die Full Property, sofern man keine Einschränkungen benötigt).

Beispiel

<tesscript>

Erzeugt eine Auto-Property, die einen Float-Wert bereit stellt,
und initialisiert ihn mit 1.0

float Property MyProperty = 1.0 Auto </tesscript>

Auto Read-only-Property

<auto read-only property> ::= <type> 'Property' <identifier> '=' <constant> 'AutoReadOnly' <flags>

Eine Auto-Read-Only-Property ist einfach ein public zugreifbarer Wert, der nicht geändert werden kann. Aus verständlichen Gründen muss sie deswegen bei der Deklaration mit einem Wert initialisiert werden.

(Es gibt auch einige intene Optimierungen, die diese Art von Property effizienter machen als die Full Property, sofern man diese nicht benötigt.).


Beispiel

<papyrusscript>

Erzeugt eine Auto-Read-only-Property, die einen String bereit stellt,
der nicht verändert werden kann.

String Property Hello = "Hello world!" AutoReadOnly </papyrusscript>

Links