Да - вы можете это явно увидеть с помощью ILDASM.
Пример:
Вот программа, которая похожа на ваш пример с последующим скомпилированным кодом CIL:
Примечания: Я использую функцию String.Concat(), чтобы посмотреть, как компилятор трактует два разных метода конкатенации.
Программа
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
Обратите внимание, как на IL_0001 компилятор создал постоянную "протестировать эту функцию" в противоположность тому, как компилятор обрабатывает String.Concat () - которая создает константу для каждого из параметров .Concat(), а затем вызывает функцию .Concat().
То же самое с VB.NET Я бы предположил, правильно? – Larsenal 2008-11-13 23:52:14
Не уверен - это проблема языка, а не фреймворк. – 2008-11-13 23:56:55