我认为最好用一个例子来问我的问题
Method1(variable var1, variable var2)
{
Method2([null or default value goes here], var1, var2)
}
Method2(variable newvar, variable var1, variable var2)
{
//functionality
}
编译器是否会通过将所有对方法 1 的调用更改为对方法 2 的调用来优化我们的代码?我认为它会内联该方法。但是,如果方法 2 调用 3,调用 4,调用 5,调用 6,会怎样?编译器是否将方法 1 调用更改为对方法 6 的调用,方法 6 将具有的值?
最佳答案
这完全是一个实现细节,可能会发生变化。但是,CLR 团队有 blogged about when methods are eligible内联(当然,这是 RyuJIT 之前的版本)。
请注意,C# 编译器不会内联方法 - 内联发生在 JIT 编译阶段。但是,一般来说,如您所述,一个简单的方法调用(不使用虚拟/抽象方法)将在运行时内联。
关于c# - 只调用另一个方法的方法的编译器优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24376679/