Esto fue mencionado en mi otra pregunta y pensé que podría ser útil agregarlo al registro. En el siguiente programa, ¿cuáles de los delegados definidos localmente, si corresponde, se almacenan en caché entre las llamadas al método de trabajo en lugar de crearse desde cero cada vez?¿Qué delegados (definidos localmente) se almacenan en caché entre las llamadas a métodos?
namespace Example
{
class Dummy
{
public int age;
}
class Program
{
private int field = 10;
static void Main(string[] args)
{
var p = new Program();
while (true)
{
p.Work();
}
}
void Work()
{
int local = 20;
Action a1 =() => Console.WriteLine(field);
Action a2 =() => Console.WriteLine(local);
Action a3 =() => Console.WriteLine(this.ToString());
Action a4 =() => Console.WriteLine(default(int));
Func<Dummy, Dummy, bool> dummyAgeMatch = (l, r) => l.age == r.age;
a1.Invoke();
a2.Invoke();
a3.Invoke();
a4.Invoke();
dummyAgeMatch.Invoke(new Dummy() { age = 1 }, new Dummy(){ age = 2 });
}
}
}
Gracias - ¡eso es novedoso! – xyz