Vic*_*aru 5 c# inline interface
如果我有一个界面:
interface IMyInterface
{
void DoSomething();
}
Run Code Online (Sandbox Code Playgroud)
还有一个实现类:
class MyClass : IMyInterface
{
public void DoSomething()
{
}
}
Run Code Online (Sandbox Code Playgroud)
DoSomething是否适合内联?我期望“否”,因为如果是接口,则该对象可能会转换为IMyInterface,因此实际调用的方法是未知的。但是,事实是它没有被标记为虚拟,这意味着它可能不在vtable上,因此如果将对象强制转换为MyClass,那么是否可以将其内联?
如果DoSomething
直接调用,则它将是内联的候选对象(取决于该方法是否满足与大小等有关的其他内联条件)。
如果DoSomething
通过接口调用,则不会内联。接口提供的间接导致需要vtable查找的虚拟调用,因此JIT编译器无法内联它,因为实际的调用站点仅在运行时解析。
归档时间: |
|
查看次数: |
672 次 |
最近记录: |