Это не имеет ничего общего с "предварительно построить события". Это оптимизация, которая может или не может быть применена компилятором во время компиляции.
При ориентации на .NET Framework вы добавляете дополнительный уровень сложности оптимизации. Многие из возможных оптимизаций не выполняются компилятором C# при первоначальной компиляции кода в IL, а скорее компилятором JIT непосредственно перед выполнением кода (когда IL скомпилирован в собственный код).
И да, JIT-компилятор, безусловно, применит такие тривиальные оптимизации, как возможное включение функции вызова. Это низко висящие фрукты для любого оптимизатора. (Хотя существуют условия, при которых функции вложения могут делать вещи медленнее, а оптимизатор, как правило, достаточно умный, чтобы распознать это. Вы всегда должны доверять оптимизатору, вместо того, чтобы пытаться заставить его делать то, что у вас есть. Это обычно умнее вас.)
Ваш фокус должен заключаться в написании кода, который ясен и легко читается/поддерживается. Не беспокойтесь о том, как оптимизировать его, пока вы не профилируете его и не определите, что он слишком медленный.