VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • C#教程之怪异现象:执行静态方法,其类的静态构

最近在重构代码时,有多个发送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会首先自动调用其静态构造函数

所以结论就只能是:任何的静态成员被引用,这里的静态成员,是不包括基类的静态成员的


相关教程