2009-11-16 18 views
0

在AS3中有一种合成获取器/设置器的方法吗?你有很多变量的类是很常见的,尤其是在数学计算(MVC模式中的模型)中,你想要揭示的东西。在Objective-C中是否有类似合成属性的东西,允许生成getters/setters?在AS3中合成获取器/设置器

感谢,

纳瓦

回答

0

编辑:如果你想使用IDE(日食)。您可以右键点击课程 - >来源 - >生成吸气器和安装人员

它与合成的用法不同,但如果您只想暴露他们并且不必使用getMethod()表示法,它可以帮助你像这样使用关键字get/set来声明方法。

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

当你使用它,你访问你可以使用变量,好像他们是公众和方法将被调用,而不是直接访问

+0

谢谢,我知道如何与getter/setters一起工作,我的问题是是否存在一些属性,就是说:为我生成它们。 这是很多肮脏的工作和代码重载手写getters/setter为大约20个变量。您可以使用40种功能复制/粘贴错误的可能性非常高。我认为有一个更优雅的方式来做到这一点 – 2009-11-16 14:43:21

+1

如果你想使用IDE(日食)。你可以去右键点击课程 - >来源 - >生成吸气剂和固化剂 – 2009-11-16 14:45:34

+0

伟大的,谢谢,这就是我一直在寻找! – 2009-11-16 15:02:05

1

如果你只是使它成为公共财产,你不必担心getter和setter方法:

public var str:String; 

但是,如果你需要沿着什么为了通知你自己的财产变化,你需要自己编写代码。希望你使用的任何IDE都可以通过为你生成这种代码来帮助你,或者你可能需要设置一些DIE可以为你注入的代码片段。

避免复制和粘贴,如果可以的话,你一定会错过改变名称的东西,会导致你的问题在路上。

+0

我正在使用eclipse。我希望这些属性是私人的: private var _str:String; 并生成一个公共str的getter和setter。你知道我如何在日食中做到这一点? 谢谢,Nava – 2009-11-16 14:35:15

2

您可以尝试正则表达式的时间。 在尝试此操作前进行备份

例如,如果你的private变量命名为_str,你希望它是public的getter/setter被命名为str,您可以使用下面的模式。在flex builder(或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; 
    } 
+0

upvoted你的答案,因为它真的很有用和整洁。 – 2009-11-16 18:23:34

2

对于那些正在使用的Flex Builder 3 IDE,有插件,用于创建和放置代码片段,例如这里:http://www.insideria.com/2008/04/flex-builder-enhancements-snippets-and-todo.html(在该网站上还有其他一些小而有用的工具)

这些可以用于一个或多或少舒适的吸气/二手设备的一代。

但是我只创建显式的getter和setter,如果我需要在那里放置一些额外的代码。有些人说如果你不使用getter和setter,它会打破封装。然而,用一种语言,你可以在不改变接口的情况下添加getter和setter,我不认为这是真的了。对于用户来说,如果他使用简单变量赋值或函数set varName(arg:object):void,则它是完全透明的。

还要记住,如果你创建一个变量[Bindable](即没有显式事件名称),编译器会为你的变量创建getter和setter,即使你没有注意到它(除了已经有getter和setters当然)。这是顺便说一句&肮脏的方式来实现声明getter和setter函数的接口

+0

很好。太可惜了,选择几个答案作为答案是不可能的,但我总是可以upvote :) – 2009-11-16 17:39:39

+0

这总是赞赏:) – 2009-11-16 17:51:11

+0

我同意这一点 - 如果你正在做的是创建一个没有任何特殊行为的getter/setter包装那么直接拥有公共属性就没有区别。 – 2009-11-17 00:08:58