我只是有一点设计问题。
如果我有这个代码
public Interface Test
{
void Xyz();
}
public class1 : WebControl , Test
{
public void XyZ()
{
// do someting
}
public OnLoad()
{
((Test)this).Xyz();
// or
Test ctrl = this as Test;
ctrl.Xyz();
// or
Xyz();
}
}
代码是否会有性能差异?我认为Xyz()直接调用会更快,但我不确定((测试)这个。)。xyz()将与直接调用有所区别。
您对此有何看法,或参考文档。
由于
ps:我只是想要表现出差异,没有答案......为什么你要演员或指定界面。我知道我可以直接调用我的方法
答案 0 :(得分:7)
我希望编译器会删除强制转换和“as”,因为它可以保证它们都能成功......如果不成功,JIT可能会这样做。如果您使用显式接口实现, 需要使用强制转换或as
运算符,请注意。在这种情况下,我会使用演员表:我个人只使用as
,如果不的值可行是正确类型(在错误以外的情况下)。< / p>
最终,任何性能差异都是微不足道的,但为了便于阅读,我会尽可能没有演员表。
答案 1 :(得分:3)
直接调用该方法,不需要将this
引用转换为接口类型,因为该方法的实现仍在当前类中。如果将类转换为接口类型,则会添加不必要的间接以获取可用的方法。
我认为不会有巨大的性能差异(正如Jon指出的那样,JIT很可能会删除所有的转换,因为它是不必要的)但是为了便于阅读,只需直接调用该方法即可。