Ответ 1
Это почти наверняка класс, сгенерированный компилятором из-за лямбда-выражения или анонимного метода. Например, рассмотрите этот код:
using System;
class Test
{
static void Main()
{
int x = 10;
Func<int, int> foo = y => y + x;
Console.WriteLine(foo(x));
}
}
Это скомпилировано в:
using System;
class Test
{
static void Main()
{
ExtraClass extra = new ExtraClass();
extra.x = 10;
Func<int, int> foo = extra.DelegateMethod;
Console.WriteLine(foo(x));
}
private class ExtraClass
{
public int x;
public int DelegateMethod(int y)
{
return y + x;
}
}
}
... за исключением использования <>c_displayClass1
в качестве имени вместо ExtraClass
. Это невыразимое имя в том, что оно не является допустимым С#, что означает, что компилятор С# точно знает, что он не появится в вашем собственном коде и не столкнется с его выбором.
Точный способ компиляции анонимных функций, конечно, зависит от реализации, так как это выбор имени для дополнительного класса.
Компилятор также генерирует дополнительные классы для блоков итератора и (в С# 5) асинхронных методах и делегатах.