究竟是什么导致在C#中执行静态构造函数?我在Windows上使用.NET 4.0进行测试,在Linux上通过Mono进行测试,我看到了相同的行为。
我一直认为第一次有一个类引用它会触发代码运行但是通过这个演示,它似乎与第一次有更多相关的请求在课堂上执行某些事情。
有人可以更清楚地解释一下吗?此外,除了lambda表达式总是存在的事实之外,这种行为是否会因不同版本的.NET而发生变化?
代码:
using System;
using System.Linq.Expressions;
class Program
{
static void Main()
{
Console.WriteLine("1. Main Started!");
Expression<Func<bool>> func = (() => Foo.ReturnFalse());
Console.WriteLine("2. Func func has been created.");
Console.WriteLine("3. Func func returns: " + func.Compile().Invoke());
}
}
public static class Foo
{
static Foo()
{
Console.WriteLine("?. Initializing Foo");
}
public static bool ReturnFalse()
{
return false;
}
}
输出:
1. Main Started!
2. Func func has been created.
?. Initializing Foo
3. Func func returns: False
我的期望:
1. Main Started!
?. Initializing Foo
2. Func func has been created.
3. Func func returns: False