Frage

Gibt es eine Möglichkeit Getter / Setter in AS3 zu synthetisieren? Es ist sehr üblich, dass Sie eine Klasse mit vielen Variablen, vor allem in mathematischen Berechnungen (Model in MVC-Muster), dass Sie verfügbar machen mögen. Gibt es so etwas wie synthesize Eigenschaft in Objective-C, das ermöglicht Getter / Setter zu generieren?

Danke,

Nava

War es hilfreich?

Lösung

EDIT: Wenn Sie die IDE (Eclipse) verwenden möchten. Sie können gehen Rechtsklick auf Klassen-> Quelle-> Gene Getter und Setter

Es ist nicht die gleiche Verwendung als synthesize, aber wenn Sie nur wollen, dass sie entlarven und müssen nicht die getMethod () Schreibweise verwenden, kann es Ihnen helfen, die Methoden mit den Schlüsselwörtern erklärt dies get / set dergleichen.

public function get example() : int
{
             return example;
}
public function set example( value : String ) : void
{
             example = value;
}

Wenn Sie es verwenden, um die Zeit, die Sie Sie Zugriff auf die Variablen verwenden können, als ob sie öffentlich waren und die Methoden anstelle von direkten Zugang aufgerufen werden

Andere Tipps

Sie können versuchen, regex. Nehmen Sie ein Backup, bevor Sie versuchen.

Zum Beispiel, wenn Ihre private Variablen _str benannt sind, und Sie wollen es public Getter / Setter genannt werden str, können Sie die folgenden Muster verwenden. Drücken Sie Strg-F in Flex Builder (oder Eclipse), aktivieren Sie das Kontrollkästchen regex, und fügen Sie die folgenden Muster zum Suchen und Ersetzen Eingabefelder sind. Nun klicken Sie auf ‚Suchen‘ die Eigenschaft Erklärung und Hit ‚Ersetzen‘ finden Setter und Getter zu erzeugen.

^((\t)+)private\s+var\s+_(\w+):(\w+)\s*;\s*(\n)

$0$5$1public function set $3(value:$4):void$5$1{$5$1$2_$3 = value;$5$1}$5$5$1public function get $3():$4$5$1{$5$1$2return _$3;$5$1}$5$5

Dieses Muster wurde getestet auf

        private var _str:String;//indented by two tabs

Und es erfolgreich generiert:

    private var _str:String;

    public function set str(value:String):void
    {
        _str = value;
    }
    public function get str():String
    {
        return _str;
    }

Für diejenigen, die den Flex Builder 3 IDE verwenden, gibt es Plug-Ins für das Erstellen und Platzieren Codefragmente, z.B. hier: http: //www.insideria. com / 2008/04 / flex-Builder-Erweiterungen-Schnipsel-and-todo.html (es gibt einige andere kleine, aber nützliche Tools auf dieser Website zusammengestellt)

Diese können für eine mehr oder weniger komfortable Getter / Setter-Generation verwendet werden.

Allerdings habe ich nur explizite Getter und Setter erstellen, wenn ich brauche es einige zusätzliche Code zu platzieren. Es gibt einige, die sagen, es bricht Verkapselung, wenn Sie nicht Getter und Setter verwenden. Doch mit einer Sprache, in dem Sie Getter und Setter später ohne Änderung der Schnittstelle hinzufügen können, glaube ich nicht, dass dies nicht mehr der Fall ist. Für den Benutzer ist es völlig transparent, wenn er ein einfaches Variablen zuweisen oder einen Funktionssatz varName (arg: Object): verwendet wird. Leere

Und auch bedenken, dass, wenn Sie eine Variable [Bindable] machen (dh ohne explizite Ereignisnamen), die Compiler Getter und Setter für die Variable erstellt wihtout Sie es zu merken (außer es bereits Getter und Setter von Kurs). Dies ist übrigens eine quick & dirty Weise Schnittstellen zu implementieren, dass declare Getter und Setter-Funktionen

Wenn Sie es nur eine öffentliche Eigenschaft machen Sie müssen sich keine Sorgen machen über Getter und Setter:

public var str:String;

Wenn Sie jedoch etwas nach dem Vorbild der Veranstaltung müssen Dispatching sich von Eigenschaftsänderungen zu informieren, finden Sie auf Code, um es selbst benötigen. Hoffentlich, was auch immer Sie verwenden kann helfen IDE durch diese Art von Code für Sie zu erzeugen, oder Sie können eine Art von Code einrichten müssen Snippet das DIE für Sie injizieren.

Vermeiden Sie kopieren und einfügen, wenn Sie können, sind Sie zu verpassen gebunden den Namen etwas zu ändern, die Sie Probleme auf dem Weg führen wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top