LINQPad 中静态初始化的意外行为
Unexpected behavior for static init in LINQPad
我运行以下LINQPad的C#程序两次:
void Main()
{
new Bar();
}
class Bar
{
static DateTime staticInitTime = DateTime.Now;
DateTime initTime = DateTime.Now;
public Bar()
{
staticInitTime.Dump("staticInitTime");
initTime.Dump("initTime");
}
}
虽然我认为第一个 运行 的结果没有问题:
staticInitTime
3/4/2017 11:45:28 PM
initTime
3/4/2017 11:45:28 PM
我无法理解第二个 运行 的结果,就在第一个之后几秒钟:
staticInitTime
3/4/2017 11:45:28 PM
initTime
3/4/2017 11:45:40 PM
具体来说:为什么 staticInitTime 将其值保持在 运行 之间?
只有当我重新构建代码时,staticInitTime 的值才会被初始化,但仅针对第一个 运行.
那是因为 Linqpad 很聪明。默认情况下,它不会在您每次 运行 查询时构建新的 AppDomain。因此,在您重建之前,任何静态初始化都将被保留。您可以在高级首选项中更改此行为:
顺便说一句,完全跑题了:Linqpad 棒极了!
我运行以下LINQPad的C#程序两次:
void Main()
{
new Bar();
}
class Bar
{
static DateTime staticInitTime = DateTime.Now;
DateTime initTime = DateTime.Now;
public Bar()
{
staticInitTime.Dump("staticInitTime");
initTime.Dump("initTime");
}
}
虽然我认为第一个 运行 的结果没有问题:
staticInitTime
3/4/2017 11:45:28 PM
initTime
3/4/2017 11:45:28 PM
我无法理解第二个 运行 的结果,就在第一个之后几秒钟:
staticInitTime
3/4/2017 11:45:28 PM
initTime
3/4/2017 11:45:40 PM
具体来说:为什么 staticInitTime 将其值保持在 运行 之间? 只有当我重新构建代码时,staticInitTime 的值才会被初始化,但仅针对第一个 运行.
那是因为 Linqpad 很聪明。默认情况下,它不会在您每次 运行 查询时构建新的 AppDomain。因此,在您重建之前,任何静态初始化都将被保留。您可以在高级首选项中更改此行为:
顺便说一句,完全跑题了:Linqpad 棒极了!