在 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);
}
也可以發現沒有觸發靜態建構式
本文所有代碼放在 github 和 gitee 歡迎訪問
可以通過如下方式獲取本文代碼
先創建一個空檔案夾,接著使用命令列 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 檔案夾
博客園博客只做備份,博客發布就不再更新,如果想看最新博客,請到 https://blog.lindexi.com/

本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可,歡迎轉載、使用、重新發布,但務必保留文章署名[林德熙](http://blog.csdn.net/lindexi_gd)(包含鏈接:http://blog.csdn.net/lindexi_gd ),不得用于商業目的,基于本文修改后的作品務必以相同的許可發布,如有任何疑問,請與我[聯系](mailto:[email protected]),
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/325212.html
標籤:.NET技术
