Ho trovato questo interessante articolo sui metodi C # inline .
L'ambito di un metodo non sembra cambiare quando una funzione diventa un candidato in linea. Ecco un riassunto di questo articolo.
How to determine what get’s inlined? The short answer is that you can’t. The MSDN article “Writing High-Performance Managed Applications : A Primer” gives the following guidance:
- Methods that are greater than 32 bytes of IL will not be inlined.
- Virtual functions are not inlined.
- Methods that have complex flow control will not be in-lined. Complex flow control is any flow control other than if/then/else; in this case, switch or while.
- Methods that contain exception-handling blocks are not inlined, though methods that throw exceptions are still candidates for inlining.
- If any of the method’s formal arguments are structs, the method will not be inlined.
Non c'è una parola chiave inline
in C #, ma esiste una direttiva del compilatore inline introdotta in .NET 4.5 chiamata MethodImplOptions.AggressiveInlining
Può essere usato in questo modo.
[MethodImpl(MethodImplOptions.AggressiveInlining)]
static int Method2()
{
// ... Aggressive inlining.
return "one".Length + "two".Length + "three".Length +
"four".Length + "five".Length + "six".Length +
"seven".Length + "eight".Length + "nine".Length +
"ten".Length;
}
Non puoi sapere con certezza se il compilatore integrerà una funzione. Questa non è una caratteristica che gli sviluppatori C hanno il controllo.