Actionscript 3 更好地使用setter和getter

Actionscript 3 更好地使用setter和getter,actionscript-3,oop,setter,getter,Actionscript 3,Oop,Setter,Getter,我有一个关于盖特和塞特的神奇方法的问题 我的问题是:什么更好更快更安全 另外,这是ActionScript3,但对于其他语言,如PHP、JavaScript和C,这个问题也可以得到回答 案例1 public class Test extends Sprite { private var _test : uint = 0; public function Test() { start(); }

我有一个关于盖特和塞特的神奇方法的问题

我的问题是:什么更好更快更安全

另外,这是ActionScript3,但对于其他语言,如PHP、JavaScript和C,这个问题也可以得到回答

案例1

    public class Test extends Sprite
    {
        private var _test : uint = 0;

        public function Test()
        {
            start();
        }

        private function start() : void
        {
            trace(_test); ** Take the private var _test **
        }

        public function set test(value : uint) : void
        {
            _test = value;
            start();
        }

        public function get test() : uint
        {
            return _test;
        }
   }
或案例2

    public class Test extends Sprite
    {
        private var _test : uint = 0;

        public function Test()
        {
            start();
        }

        private function start() : void
        {
            trace(test); ** difference here, take the public function test **
        }

        public function set test(value : uint) : void
        {
            _test = value;
            start();
        }

        public function get test() : uint
        {
            return _test;
        }
   }
最快的方式是什么


谢谢

你已经完成了90%的编写自己的测试用例来发现自己的能力

getter和setter用于添加对设置或检索属性时发生的事情的控制,或者创建只读或只读属性

这些好处大大超过了任何可能的性能差异

对于这些性能差异,这里有一个测试环境:

// Test property.
var _test:uint = 0;
function get test():uint{ return _test; }
function set test(value:uint):void{ _test = value; }

// Direct access test.
function directTest(amt:int):Number
{
    // Directly accessing the property.
    var t:Number = getTimer();
    for(var i:int = 0; i < amt; i++)
    {
        var temp:uint = _test;
        _test = i;
    }

    return getTimer() - t;
}


// Getter/setter test.
function viaTest(amt:int):Number
{
    // Via getter/setter.
    var t:Number = getTimer();
    for(var i:int = 0; i < amt; i++)
    {
        var temp:uint = test;
        test = i;
    }

    return getTimer() - t;
}
我得到了一些结果:

Amount      Direct      Get/Set
1000        0           0
5000        0           0
20,000      0           2
150,000     1           14
500,000     2           46
2,000,000   10          184
10,000,000  47          921

在编写自己的测试用例以了解自己的过程中,您已经完成了90%

getter和setter用于添加对设置或检索属性时发生的事情的控制,或者创建只读或只读属性

这些好处大大超过了任何可能的性能差异

对于这些性能差异,这里有一个测试环境:

// Test property.
var _test:uint = 0;
function get test():uint{ return _test; }
function set test(value:uint):void{ _test = value; }

// Direct access test.
function directTest(amt:int):Number
{
    // Directly accessing the property.
    var t:Number = getTimer();
    for(var i:int = 0; i < amt; i++)
    {
        var temp:uint = _test;
        _test = i;
    }

    return getTimer() - t;
}


// Getter/setter test.
function viaTest(amt:int):Number
{
    // Via getter/setter.
    var t:Number = getTimer();
    for(var i:int = 0; i < amt; i++)
    {
        var temp:uint = test;
        test = i;
    }

    return getTimer() - t;
}
我得到了一些结果:

Amount      Direct      Get/Set
1000        0           0
5000        0           0
20,000      0           2
150,000     1           14
500,000     2           46
2,000,000   10          184
10,000,000  47          921

我总是喜欢在同一类的方法中使用getter和setter,虽然我可以使用privare变量

getter和setter隐藏了必须设置或获取类属性时所需的逻辑,因此可以修改setter/getter中的实际操作,而不必担心对客户端方法的影响

它们还避免了代码的重复


但这只是我的观点…:

尽管我可以使用privare变量,但我始终更喜欢在同一类的方法中使用getter和setter

getter和setter隐藏了必须设置或获取类属性时所需的逻辑,因此可以修改setter/getter中的实际操作,而不必担心对客户端方法的影响

它们还避免了代码的重复


但这只是我的观点…:

如果我设置并获得每秒100次的属性呢?@Bondye,哇,每秒100次?!在这里要小心,你可能会烤坏你的CPU。@Bondye我已经添加了一些实际数据,以供你观看。基本上,即使访问该物业1000万次,您也只需不到一秒钟的时间就可以看到这两个选项。@MartyWallace谢谢您!如果我设置并获得每秒100次的属性呢?@Bondye,哇,每秒100次?!在这里要小心,你可能会烤坏你的CPU。@Bondye我已经添加了一些实际数据,以供你观看。基本上,即使访问该物业1000万次,您也只需不到一秒钟的时间就可以看到这两个选项。@MartyWallace谢谢您!我没想过。我将使用getter和setter,这样我就不会重复操作属性的代码了。我将使用getter和setter,这样我就不会重复操作属性的代码。