flash as3中的私有函数和私有变量?

时间:2011-05-25 02:27:30

标签: flash actionscript

有类定义,其中所有方法都是私有的 我的问题是为什么它们是私有的,因为我已经尝试了一个代码,其中我将所有私人访问修饰符更改为公开,没有任何改变!

如果您将该类的所有方法设为私有,那该怎么做,如何在另一个类上访问该类。因为我知道私有方法只能在声明它们的类中访问!将该类的实例能够访问超类' 私人方法!

关于私有变量,我还不清楚为什么要创建一个私有变量然后使用getter和setter,当你可以简单地公开它时!这些变量是否称为静态? 因为我理解私有函数和私有变量是静态的? 我是对的吗?

我知道我真的很困惑! 因为我刚认为flash as3, 并且已经研究了一个半星期!

1 个答案:

答案 0 :(得分:4)

private只表示您只能从该类中访问该属性或方法。很难解释为什么这很有用,但这里有一些例子:

只读:您可能希望拥有只读属性。即。此属性由其中包含类的代码更改,但您希望使用 getter 从其他位置访问当前值。

封装:使用private基本上只是一种保持代码清洁和结构化的方法。如果以后需要处理项目,可以清楚地看到哪些属性仅在当前类中更改,哪些方法仅在当前类中调用。保存您需要回溯并确保您在其他地方没有随机类来改变您的价值观。

另一种需要私有属性的策略是拥有一个可以递增的值,并让setter运行适合于此的操作。

例如

_currentSlide内有一个名为Slideshow的媒体资源 你有一个看起来像这样的setter:

public function set currentSlide(num:int):void
{
    _currentSlide = num;

    // do logic for swapping the visual slide to
    // the new slide
}

这意味着你可以轻松地去:

myslideshow.currentSlide ++;

增加_currentSlide属性并将下一张幻灯片加载到视图中。

如果您想拥有只能在类和ALSO类中访问的属性,那么可以使用protected。除了您仍然可以通过扩展类设置属性之外,这基本上与使用private的{​​{1}}具有相同的只读功能。

此外,getterstatic不相关。 private表示您可以在不创建类实例的情况下访问属性或方法。以static类为例。 Mathrandomcos等是round类的static方法。

以下是一个例子:

Math

现在不是这样做的:

public class EG
{
    public static function hello():void
    {
        trace("hello");
    }
}

您可以这样做:

var t:EG = new EG();
t.hello();