Flash CS3-Dokumentation |
|||
| Programmieren mit ActionScript 3.0 > Objektorientierte Programmierung mit ActionScript > Klassen > Klasseneigenschaften-Attribute | |||
In Abhandlungen über das ActionScript-Objektmodell wird der Begriff Eigenschaft für alles verwendet, was ein Mitglied einer Klasse sein kann; dazu gehören auch Variable, Konstanten und Methoden. Dies unterscheidet sich von der Definition dieses Begriffs im Komponenten-Referenzhandbuch für ActionScript 3.0. In diesem Referenzhandbuch wird der Begriff wesentlich enger ausgelegt und umfasst nur Klassenmitglieder, die entweder Variable sind oder von einer Get/Set-Methode definiert werden. In ActionScript 3.0 gibt es eine Reihe von Attributen, die mit jeder Eigenschaft einer Klasse verwendet werden können. Diese Attribute sind in der folgenden Tabelle aufgeführt.
|
Attribut |
Definition |
|---|---|
|
|
Sichtbar für Verweise innerhalb des gleichen Pakets. |
|
|
Sichtbar für Verweise in der gleichen Klasse. |
|
|
Sichtbar für Verweise in der gleichen Klasse sowie in abgeleiteten Klassen. |
|
|
Sichtbar für alle Verweise. |
|
|
Gibt an, dass eine Eigenschaft zur Klasse und nicht zu Instanzen dieser Klasse gehört. |
|
|
Benutzerdefinierter Namespace-Name. |
ActionScript 3.0 umfasst vier spezielle Attribute, mit denen der Zugriff auf in einer Klasse definierte Eigenschaften gesteuert wird: public, private, protected und internal.
Das Attribut public macht eine Eigenschaft im gesamten Skript sichtbar. Um beispielsweise eine Methode für Code außerhalb des Pakets verfügbar zu machen, müssen Sie sie mit dem Attribut public deklarieren. Dies gilt für jede Eigenschaft, unabhängig davon, ob sie mit dem Schlüsselwort var, const oder function deklariert wurde.
Das Attribut private macht eine Eigenschaft nur für aufrufende Objekte innerhalb der Klasse sichtbar, in der die Eigenschaft definiert wurde. Dieses Verhalten unterscheidet sich von dem des private-Attributs in ActionScript 2.0, das einer Unterklasse den Zugriff auf eine private Eigenschaft einer übergeordneten Klasse gestattete. Eine andere wesentliche Verhaltensänderung betrifft den Laufzeitzugriff. In ActionScript 2.0 verhinderte das Schlüsselwort private den Zugriff während der Kompilierung und wurde zur Laufzeit einfach umgangen. Dies ist in ActionScript 3.0 nicht mehr möglich. Auf Eigenschaften, die als private gekennzeichnet sind, kann weder während der Kompilierung noch zur Laufzeit zugegriffen werden.
Der folgende Code erstellt eine einfache Klasse namens PrivateExample mit einer als „private" deklarierten Variablen und versucht dann, von außerhalb der Klasse aus auf diese Variable zuzugreifen. In ActionScript 2.0 war der Zugriff während der Kompilierung verboten, aber das Verbot konnte mit dem Eigenschaften-Zugriffsoperator ([]) leicht umgangen werden. Dieser Operator greift nicht während der Kompilierung sondern zur Laufzeit auf die Eigenschaft zu.
class PrivateExample
{
private var privVar:String = "private variable";
}
var myExample:PrivateExample = new PrivateExample();
trace(myExample.privVar); // Compiler-Fehler im strikten Modus
trace(myExample["privVar"]); // ActionScript 2.0 gestattet den Zugriff, in ActionScript 3.0 tritt ein Laufzeitfehler auf.
In ActionScript 3.0 führt der Versuch, mit dem Punktoperator auf eine als „private" deklarierte Eigenschaft (myExample.privVar) zuzugreifen, im strikten Modus zu einem Kompilierzeitfehler. Andernfalls tritt der Fehler zur Laufzeit auf, als ob Sie den Eigenschaften-Zugriffsoperator (myExample["privVar"]) verwenden.
In der folgenden Tabelle sind die Ergebnisse des versuchten Zugriffs auf eine als „private" deklarierte Eigenschaft aufgeführt, die zu einer versiegelten (nicht dynamischen) Klasse gehört:
|
Strikter Modus |
Standardmodus |
|
|---|---|---|
|
Punktoperator ( |
Kompilierzeitfehler |
Laufzeitfehler |
|
Klammernoperator ( |
Laufzeitfehler |
Laufzeitfehler |
Bei Klassen, die mit dem Attribut dynamic deklariert sind, führen Versuche, auf eine als „privat" deklarierte Variable zuzugreifen, nicht zu einem Laufzeitfehler. Stattdessen ist die Variable einfach nicht sichtbar, und Flash Player gibt den Wert undefined zurück. Wenn Sie den Punktoperator jedoch im strikten Modus verwenden, tritt ein Kompilierzeitfehler auf. Der folgende Beispielcode entspricht dem vorangegangenen, außer dass die PrivateExample-Klasse als dynamische Klasse deklariert ist:
dynamic class PrivateExample
{
private var privVar:String = "private variable";
}
var myExample:PrivateExample = new PrivateExample();
trace(myExample.privVar); // Compiler-Fehler im strikten Modus
trace(myExample["privVar"]); // Ausgabe: undefined
Anstatt einen Fehler zu erzeugen, geben dynamische Klassen im Allgemeinen den Wert undefined zurück, wenn Code außerhalb einer Klasse versucht, auf eine als „private" deklarierte Eigenschaft zuzugreifen. Die folgende Tabelle zeigt, dass nur dann ein Fehler erzeugt wird, wenn im strikten Modus mit dem Punktoperator auf eine als „private" deklarierte Eigenschaft zugegriffen wird:
|
Strikter Modus |
Standardmodus |
|
|---|---|---|
|
Punktoperator ( |
Kompilierzeitfehler |
|
|
Klammernoperator ( |
|
|
Das neu mit ActionScript 3.0 eingeführte Attribut protected macht eine Eigenschaft für aufrufende Objekte innerhalb der eigenen Klasse oder einer Unterklasse sichtbar. Anders ausgedrückt, eine als „protected" deklarierte Eigenschaft steht innerhalb der eigenen Klasse oder in Klassen zur Verfügung, die sich in der Vererbungshierarchie unterhalb der eigenen Klasse befinden. Dies gilt unabhängig davon, ob sich die Unterklasse im gleichen oder in einem anderen Paket befindet.
Diese Funktion ähnelt dem private-Attribut in ActionScript 2.0. Das ActionScript 3.0-Attribut protected ähnelt auch dem protected-Attribut in Java, unterscheidet sich aber insofern von der Java-Version, als dass der Zugriff durch aufrufende Objekte im gleichen Paket in Java gestattet ist. Das protected-Attribut eignet sich insbesondere dann, wenn Unterklassen eine Variable oder Methode erfordern, der Code jedoch außerhalb der Vererbungskette nicht sichtbar sein soll.
Das neu mit ActionScript 3.0 eingeführte Attribut internal macht eine Eigenschaft für aufrufende Objekte innerhalb des eigenen Pakets sichtbar. Dies ist das Standardattribut für Code innerhalb eines Pakets. Es gilt für jede Eigenschaft, die keines der folgenden Attribute aufweist:
public private protected Das internal-Attribut ähnelt der Standard-Zugriffskontrolle in Java, obwohl es in Java keinen expliziten Namen für diese Zugriffsebene gibt und sie nur durch Weglassen eines anderen Zugriffsmodifizierers erreicht werden kann. Mit dem Attribut internal in ActionScript 3.0 können Sie explizit festlegen, dass eine Eigenschaft nur für aufrufende Objekte innerhalb des eigenen Pakets sichtbar ist.
Das static-Attribut, das mit Eigenschaften verwendet werden kann, die mit den Schlüsselwörtern var, const oder function deklariert wurden, ermöglicht Ihnen das Anhängen einer Eigenschaft an die Klasse anstatt an Instanzen der Klasse. Code, der sich außerhalb der Klasse befindet, muss statische Eigenschaften mit dem Klassennamen anstelle des Instanznamens aufrufen.
Statische Eigenschaften werden von Unterklassen nicht übernommen, aber die Eigenschaften sind Teil der Gültigkeitsbereichskette der Unterklasse. Dies bedeutet, dass eine statische Variable oder Methode im Unterklassenrumpf verwendet werden kann, ohne dass auf die Klasse verwiesen wird, in der sie definiert wurde. Weitere Informationen finden Sie unter Nicht geerbte statische Eigenschaften.
Als Alternative zu den vordefinierten Attributen der Zugriffskontrolle können Sie einen benutzerdefinierten Namespace erstellen, der als Attribut verwendet werden soll. Es kann nur ein Namespace-Attribut pro Definition verwendet werden, und Sie können ein Namespace-Attribut nicht in Verbindung mit einem der Zugriffskontroll-Attribute (public, private, protected, internal) verwenden. Weitere Informationen zur Verwendung von Namespaces finden Sie unter Namespaces.
Flash CS3
Eine E-Mail an mich senden, wenn dieser Seite Kommentare hinzugefügt werden | Kommentarbericht
Aktuelle Seite: http://livedocs.adobe.com/flash/9.0_de/main/00000062.html