怪異現象:執行靜態方法,其類的靜態構造函數沒有執行


最近在重構代碼時,有多個發送API請求的幫助類,分別向不同的API站點發送請求,並反序列化返回結果。API又都是我們自己的,所以不同API幫助類的邏輯都差不多,有很多Copy-Paste代碼,就是API的域Addr不一樣,所以當然要重構一下啦

源代碼就不貼了,貼一段遇到問題后我的測試代碼

 1 using System;
 2 
 3 namespace ConsoleApp1
 4 {
 5     public class Program
 6     {
 7         static void Main(string[] args)
 8         {
 9 
10             C1.writeA();
11             C1.writeB();
12             C2.writeA();
13             C2.writeB();
14 
15             Console.ReadKey();
16         }
17     }
18 
19     public class CBase<T>
20     {
21         static CBase()
22         {
23 
24         }
25 
26         public static string A { get; set; }
27         public static string B { get; set; }
28 
29         public static void writeA()
30         {
31             Console.WriteLine(A);
32         }
33 
34         public static void writeB()
35         {
36             Console.WriteLine(B);
37         }
38     }
39 
40     public class C1 : CBase<C1>
41     {
42         static C1()
43         {
44             A = "abc";
45             B = "def";
46         }
47     }
48 
49     public class C2 : CBase<C2>
50     {
51         static C2()
52         {
53             A = "123";
54             B = "456";
55         }
56 
57     }
58 }

期望能輸出 abc def 123 456,但什么都沒輸出

經調試發現C1、C2的靜態構造函數都沒有執行,所以問題就在這,調用了其靜態方法WriteA WriteB,為什么其靜態構造函數沒有執行呢

我們都知道靜態構造函數的調用時機:在首次實例化該類或任何的靜態成員被引用時,.NET CLR會首先自動調用其靜態構造函數

所以結論就只能是:任何的靜態成員被引用,這里的靜態成員,是不包括基類的靜態成員的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM