0

有没有办法在 AS3 中合成 getter/setter?您有一个包含很多变量的类,特别是在数学计算(MVC 模式中的模型)中,您想公开这些变量是很常见的。在 Objective-C 中是否有类似综合属性的东西,它允许生成 getter/setter?

谢谢,

纳瓦

4

4 回答 4

2

对于使用 Flex Builder 3 IDE 的用户,可以使用插件来创建和放置代码片段,例如:http: //www.insideria.com/2008/04/flex-builder-enhancements-snippets-and- todo.html(该站点上还编译了一些其他小但有用的工具)

这些可以用于或多或少舒适的 getter/setter 生成。

但是,如果我需要在那里放置一些额外的代码,我只会创建显式的 getter 和 setter。有些人说如果你不使用 getter 和 setter 会破坏封装。但是,使用一种可以在不更改界面的情况下稍后添加 getter 和 setter 的语言,我认为这不再是真的了。对于用户来说,如果他使用普通变量 assign 或函数集 varName(arg:object):void,则完全透明。

还要记住,如果您创建一个变量 [Bindable](即没有明确的事件名称),编译器会为您的变量创建 getter 和 setter,而您甚至不会注意到它(当然已经有 getter 和 setter 除外)。这是BTW一种快速而肮脏的方式来实现声明getter和setter函数的接口

于 2009-11-16T17:34:50.187 回答
2

你可以试试正则表达式。在尝试此操作之前进行备份

例如,如果您的private变量被命名_str并且您希望它的publicgetter/setter 被命名str,您可以使用以下模式。在 flex builder(或 eclipse)中按 Ctrl-F,勾选 regex 复选框,并将以下模式分别添加到搜索和替换输入字段中。现在点击“查找”以查找属性声明并点击“替换”以生成 setter 和 getter。

^((\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 回答
1

如果您只是将其设为公共属性,则不必担心 getter 和 setter:

public var str:String;

但是,如果您需要与事件分派类似的任何东西来通知自己属性更改,则需要自己编写代码。希望您使用的任何 IDE 都可以为您生成此类代码,或者您可能需要设置 DIE 可以为您注入的某种代码片段。

如果可以,请避免复制和粘贴,您一定会错过更改某些会导致您在路上出现问题的名称。

于 2009-11-16T14:32:18.887 回答
0

编辑:如果你想使用 IDE (eclipse) 。你可以右击class->Source->Generate Getters and Setters

它与合成的用途不同,但如果您只想公开它们而不必使用 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 回答