代码之家  ›  专栏  ›  技术社区  ›  Cédric Boivin

什么是最有效的?为什么?

  •  1
  • Cédric Boivin  · 技术社区  · 15 年前

    我只是有一个小小的设计问题。

    如果我有这个密码

    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()会与直接调用有所不同。

    您对此有何看法,或参考文件。

    谢谢

    附言:我只是没有不同的表现,没有答案…为什么要强制转换或指定接口。我知道我可以直接调用我的方法

    2 回复  |  直到 15 年前
        1
  •  7
  •   Jon Skeet    15 年前

    我希望编译器可以同时删除强制转换和“as”,因为它可以保证它们都会成功…如果没有,那么JIT很可能会这样做。你 需要演员或 as 运算符如果使用显式接口实现,请注意。在这种情况下,我会使用演员表:我个人只使用 作为 如果价值 正确的类型(在错误以外的情况下)。

    最终,任何性能差异都是无关紧要的,但是为了可读性,如果可能的话,我将不使用强制转换。

        2
  •  3
  •   Andrew Hare    15 年前

    直接调用方法,不需要强制转换 this 引用接口类型作为 实施 方法的仍在当前类中。如果您将类强制转换为接口类型,则会添加不必要的间接寻址,以获取您可用的方法。

    我不认为会有很大的性能差异(如jon指出的那样,JIT很可能会删除所有的强制转换,因为这是不必要的),但是为了可读性,直接调用这个方法即可。