C#内联方法会在接口中声明吗?

时间:2014-02-25 05:49:32

标签: c# interface inline

如果我有一个界面:

 interface IMyInterface
 {
    void DoSomething();
 }

实施班:

 class MyClass : IMyInterface
 {
     public void DoSomething()
     {

     }
 }

DoSomething是内联的候选人吗?我期望“不”,因为如果它是一个接口,那么该对象可以被转换为IMyInterface,因此被调用的实际方法是未知的。但是事实上它没有标记为虚拟意味着它可能不在vtable上,所以如果对象被转换为MyClass,那么也许它可以被内联?

1 个答案:

答案 0 :(得分:4)

如果您直接致电DoSomething,那么它将成为内联的候选者(取决于该方法是否符合与大小等相关的其他内联标准)。

如果您通过界面调用DoSomething,则不会内联。接口提供的间接导致需要vtable查找的虚拟调用,因此JIT编译器无法内联它,因为实际的调用点仅在运行时解析。