什么是最高效的,为什么?

时间:2009-09-02 15:20:13

标签: c# .net .net-3.5

我只是有一点设计问题。

如果我有这个代码

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:我只是想要表现出差异,没有答案......为什么你要演员或指定界面。我知道我可以直接调用我的方法

2 个答案:

答案 0 :(得分:7)

我希望编译器会删除强制转换和“as”,因为它可以保证它们都能成功......如果不成功,JIT可能会这样做。如果您使用显式接口实现, 需要使用强制转换或as运算符,请注意。在这种情况下,我会使用演员表:我个人只使用as,如果的值可行是正确类型(在错误以外的情况下)。< / p>

最终,任何性能差异都是微不足道的,但为了便于阅读,我会尽可能没有演员表。

答案 1 :(得分:3)

直接调用该方法,不需要将this引用转换为接口类型,因为该方法的实现仍在当前类中。如果将类转换为接口类型,则会添加不必要的间接以获取可用的方法。

我认为不会有巨大的性能差异(正如Jon指出的那样,JIT很可能会删除所有的转换,因为它是不必要的)但是为了便于阅读,只需直接调用该方法即可。