0

AS3でゲッター/セッターを合成する方法はありますか?特に数学計算(MVCパターンのモデル)で公開したい変数がたくさんあるクラスがあることは非常に一般的です。ゲッター/セッターを生成できるObjective-Cのsyntheticプロパティのようなものはありますか?

ありがとう、

ナバ

4

4 に答える 4

2

正規表現を試すことができます。これを試みる前にバックアップを取ります。

たとえば、private変数に名前が付けられていて、ゲッター/セッターに名前を付け_strたい場合は、次のパターンを使用できます。フレックスビルダー(またはEclipse)でCtrl-Fを押し、正規表現チェックボックスをオンにして、次のパターンを検索に追加し、入力フィールドをそれぞれ置き換えます。次に、「検索」を押してプロパティ宣言を検索し、「置換」を押してセッターとゲッターを生成します。publicstr

^((\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

このパターンはでテストされました

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

そして、それは正常に生成されました:

    private var _str:String;

    public function set str(value:String):void
    {
        _str = value;
    }
    public function get str():String
    {
        return _str;
    }
于 2009-11-16T15:07:29.920 に答える
2

Flex Builder 3 IDEを使用している場合は、コードスニペットを作成および配置するためのプラグインがあります。例:http://www.insideria.com/2008/04/flex-builder-enhancements-snippets-and- todo.html(そのサイトにコンパイルされた他のいくつかの小さいが便利なツールがあります)

これらは、多かれ少なかれ快適なゲッター/セッター世代に使用できます。

ただし、追加のコードを配置する必要がある場合にのみ、明示的なゲッターとセッターを作成します。ゲッターやセッターを使わないとカプセル化が崩れると言う人もいます。しかし、インターフェースを変更せずに後でゲッターとセッターを追加できる言語では、これはもはや真実ではないと思います。ユーザーにとって、プレーン変数assignまたは関数セットvarName(arg:object):voidを使用している場合は、完全に透過的です。

また、変数[Bindable]を作成すると(つまり、明示的なイベント名なしで)、コンパイラーは、気付かないうちに変数のゲッターとセッターを作成することにも注意してください(もちろん、ゲッターとセッターがすでに存在する場合を除く)。これは、ゲッター関数とセッター関数を宣言するインターフェイスを実装するための迅速で汚い方法です。

于 2009-11-16T17:34:50.187 に答える
1

公共の財産にするだけなら、ゲッターやセッターについて心配する必要はありません。

public var str:String;

ただし、プロパティの変更を通知するためにイベントディスパッチに沿って何かが必要な場合は、自分でコーディングする必要があります。うまくいけば、使用しているIDEがこの種のコードを生成するのに役立つか、DIEが挿入できる何らかのコードスニペットを設定する必要があるかもしれません。

可能であれば、コピーアンドペーストは避けてください。問題の原因となる名前の変更を見逃してしまう可能性があります。

于 2009-11-16T14:32:18.887 に答える
0

編集:IDE(Eclipse)を使用する場合。クラス->ソース->ゲッターとセッターの生成を右クリックします。

合成と同じ使用法ではありませんが、それらを公開するだけでgetMethod()表記を使用する必要がない場合は、このようにキーワードget/setを使用してメソッドを宣言するのに役立ちます。

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

アクセス時に使用すると、変数をパブリックであるかのように使用でき、直接アクセスの代わりにメソッドが呼び出されます。

于 2009-11-16T14:37:12.120 に答える