Ron*_*den 1 oop getter setter actionscript-3
我有一个关于魔法getter和setter的问题.
我的问题是:什么是更好(更快,更安全)?
PS这是ActionScript 3,但也可以回答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;
}
}
Run Code Online (Sandbox Code Playgroud)
或案例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;
}
}
Run Code Online (Sandbox Code Playgroud)
什么是最好(最快)的方式?
谢谢!
您大约有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;
}
Run Code Online (Sandbox Code Playgroud)
快速演示如何使用它:
trace("Direct: " + directTest(1000000));
trace("Getter/Setter: " + viaTest(1000000));
Run Code Online (Sandbox Code Playgroud)
我得到了一些结果:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
443 次 |
| 最近记录: |