Sí - Puede ver esto explícitamente usando ILDASM.
Ejemplo:
Aquí es un programa que es similar a su ejemplo seguido por el código compilado CIL:
Nota: Estoy usando la función String.Concat() sólo para ver cómo el compilador trata el dos métodos diferentes de concatenación.
Programa
class Program
{
static void Main(string[] args)
{
string s = "test " + "this " + "function";
string ss = String.Concat("test", "this", "function");
}
}
ILDASM
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 29 (0x1d)
.maxstack 3
.locals init (string V_0,
string V_1)
IL_0000: nop
IL_0001: ldstr "test this function"
IL_0006: stloc.0
IL_0007: ldstr "test"
IL_000c: ldstr "this"
IL_0011: ldstr "function"
IL_0016: call string [mscorlib]System.String::Concat(string,
string,
string)
IL_001b: stloc.1
IL_001c: ret
} // end of method Program::Main
Note como en IL_0001 el compilador crea la constante "prueba de esta función", en contraposición a la forma en que el compilador trata el String.Concat () función - que crea una constante para cada uno de los parametros .Concat(), luego llama a la función .Concat().
Lo mismo con VB.NET, supongo, ¿no? – Larsenal
No estoy seguro - es un problema de lenguaje, no de framework. –
¿Te importa si cambio la pregunta a C#? – Larsenal