我有这些接口:
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();
}
我确定我正在寻找的信息就在那里,很难找到“是”和“作为”......提前致谢!
答案 0 :(得分:1)
我尝试了一点测试,找出哪个更快,期望“as”变体稍好一些,因为变量赋值和检查null似乎不如类型比较复杂(两个选项都包含类型转换) - 并被证明是正确的。
但差异很小:每次100000次迭代,选项1始终大约3毫秒(!)。
答案 1 :(得分:1)
正如weltraumpirat所说,选项1更快,
但如果您正在处理自己的代码,并且没有其他任何人愿意接触它,那就去吧。
但是如果它是一个团队合作而你不打算运行100,000次任务对于毫秒时间至关重要,那么对于那些通过你的代码阅读的人来说,选项2会容易得多。
如果您将代码交给客户进行进一步开发,这一点尤其重要。