编译器是否丢弃空方法?

Mec*_*MK1 7 c# optimization

C#编译器会优化空的void方法吗?就像是

private void DoNothing()
{
}
Run Code Online (Sandbox Code Playgroud)

实际上,除了添加DoNothing到调用堆栈并再次删除它之外,没有代码可以运行,优化此调用不是更好吗?

Jon*_*eet 18

C#编译器会优化空的void方法吗?

不,它们仍然可以通过反射访问,因此方法本身保留很重要.

任何呼叫站点都可能包含该呼叫 - 但JIT可能会优化它们.这样做的位置要好得多.它基本上是内联的特殊情况,内联代码为空.

请注意,如果您在另一个对象上调用它:

foo.DoNothing();
Run Code Online (Sandbox Code Playgroud)

不是无操作,因为它会检查foo是否为非空.