在 dotnet 里面,有很多框架都喜歡掃描程序集進行初始化邏輯,在掃描程序集的所有類型的時候,相當於碰到所有類型。而某個類型的靜態構造函數將會在某個類型被使用之前被 CLR 調用,那么掃描類型是否會觸發此類型的靜態構造函數的調用?答案是不會的
如下面的簡單的例子,創建一個 Foo 的類型,此類型包含靜態構造函數。在此靜態構造函數加上輸出,通過控制台輸出可以了解是否有觸發靜態構造函數
class Foo
{
static Foo()
{
Console.WriteLine("Foo");
}
}
接下來方式獲取此 Foo 類型看是否會觸發靜態構造函數
var type = typeof(Foo);
執行代碼,可以發現 Foo 是沒有被觸發的
接下來嘗試掃描整個程序集,獲取所有類型,如下面代碼
foreach (var t in typeof(Program).Assembly.GetTypes())
{
Console.WriteLine(t.FullName);
}
也可以發現沒有觸發靜態構造函數
可以通過如下方式獲取本文代碼
先創建一個空文件夾,接着使用命令行 cd 命令進入此空文件夾,在命令行里面輸入以下代碼,即可獲取到本文的代碼
git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin ea40ad3aa116f7ad598943eff59b7b0e9d661e18
以上使用的是 gitee 的源,如果 gitee 不能訪問,請替換為 github 的源
git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
獲取代碼之后,進入 BerharniheHurlahereho 文件夾