我认为最好问一个例子
我的问题Method1(variable var1, variable var2)
{
Method2([null or default value goes here], var1, var2)
}
Method2(variable newvar, variable var1, variable var2)
{
//functionality
}
编译器是否会通过将对method1的所有调用更改为对方法2的调用来优化我们的代码?我认为它会内联该方法。但是,如果method2调用3调用4调用5调用6,该怎么办?编译器是否将method1调用更改为使用它将具有的值来调用方法6?
答案 0 :(得分:4)
这完全是一个实施细节,可能会有所变化。但是,CLR团队有blogged about when methods are eligible要内联(虽然这当然是在RyuJIT之前)。
请注意,C#编译器并没有内联方法 - 内联在JIT编译阶段发生。通常,如您所述,(在没有使用虚拟/抽象方法的情况下)的简单方法调用将在运行时内联。