在这种情况下使用“是”或“as”?

时间:2011-01-10 19:27:54

标签: actionscript interface types casting

我有这些接口:

public interface IBaseInterface
{
    function Method():void:
}

public interface IExtendedInterface extends IBaseInterface
{
    function MethodTwo():void;
}

...和“IBaseInterface”类型的向量我需要迭代:

var myVector:Vector.<IBaseInterface> = new Vector.<IBaseInterface>();

我需要对使用IExtendedInterface的对象执行操作。哪个是首选方案?

for each(var obj:IBaseInterface in myVector)
{
    // Option 1:
    var tmp:IExtendedInterface = obj as IExtendedInterface;

    if(tmp != null)
        tmp.MethodTwo();

    // Option 2:
    if(obj is IExtendedInterface)
        IExtendedInterface(obj).MethodTwo();
}

我确定我正在寻找的信息就在那里,很难找到“是”和“作为”......提前致谢!

2 个答案:

答案 0 :(得分:1)

我尝试了一点测试,找出哪个更快,期望“as”变体稍好一些,因为变量赋值和检查null似乎不如类型比较复杂(两个选项都包含类型转换) - 并被证明是正确的。

但差异很小:每次100000次迭代,选项1始终大约3毫秒(!)。

答案 1 :(得分:1)

正如weltraumpirat所说,选项1更快,

但如果您正在处理自己的代码,并且没有其他任何人愿意接触它,那就去吧。

但是如果它是一个团队合作而你不打算运行100,000次任务对于毫秒时间至关重要,那么对于那些通过你的代码阅读的人来说,选项2会容易得多。

如果您将代码交给客户进行进一步开发,这一点尤其重要。