有没有办法在AS3中合成getter / setter?你有一个包含大量变量的类是很常见的,尤其是在你想要公开的数学计算(MVC模式中的模型)中。在Objective-C中是否存在类似于属性的东西,它允许生成getter / setter?
谢谢,
Nava
答案 0 :(得分:2)
你可以试试正则表达式。 在尝试此操作前进行备份。
例如,如果您的private
变量名为_str
,并且您希望将public
getter / setter命名为str
,则可以使用以下模式。在弹性构建器(或eclipse)中按Ctrl-F,勾选正则表达式复选框,并将以下模式添加到搜索并分别替换输入字段。现在点击'Find'找到属性声明并点击'Replace'来生成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;
}
答案 1 :(得分: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的语言,我认为这不再是真的了。对于用户来说,如果他使用普通变量赋值或函数集varName(arg:object),则它是完全透明的:void。
还要记住,如果你创建一个变量[Bindable](即没有明确的事件名称),编译器会为你的变量创建getter和setter,而你甚至没有注意到它(除了已经有的getter和setter)课程)。这是BTW一种快速而简单的方法来实现声明getter和setter函数的接口
答案 2 :(得分:1)
如果你只是把它变成一个公共财产,你不必担心吸气者和二传手:
public var str:String;
但是,如果您需要事件调度的任何内容来通知自己属性更改,您需要自己编写代码。希望您使用的IDE可能有助于为您生成此类代码,或者您可能需要设置某种类型的代码段,DIE可以为您注入。
如果可以,请避免复制和粘贴,您一定不会错过更改会导致您遇到问题的内容的名称。
答案 3 :(得分: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;
}
当您使用它时,您访问的时间可以使用变量,就像它们是公共的一样,并且将调用方法而不是直接访问