静态构造方法
如何调用
静态构造方法调用只需要你在外面用这个类的其它静态方法时候才会调用,类似于静态类里调用静态方法的时候执行。
原理
静态类里的静态构造方法在执行的时候只会执行一次就不会执行了,哪怕再次执行这个静态类里的方法,即使是非静态类里的静态构造方法也是如此
但是,如果是泛型类则不一样,即使每次调用同一个静态构造方法,这个静态构造方法也会被多次执行,比如外面掉两次这个类,但是每次传的泛型不同,这个静态构造方法也会被执行两次,但是,如果两次都传同样的泛型,该静态构造方法也是只执行一次的
我们创建一个泛型非静态类,用于做泛型缓存程序集
public class FormFactory
{
private static List
可以看到,我们在这个泛型类里面创建了一个静态构造方法static FormFactory(),和一个静态方法CreateForm(string formName),在外面窗体我们在加载事件里调用一下CreateForm方法,用来触发静态构造方法。
然后,我们在这个窗体的树形菜单控件的选择后的事件里也调用该方法
接着,我们在该静态构造方法里打断点进行调试
我们通过运行调试发现,在加载该窗体的时候会调用该静态构造方法,然后在树形控件里随便选中一个节点时候也会调用该静态构造方法。但是,如果我们将上面或者下面调用该类的静态方法时候传的泛型类型统一的话,那么,通过调试发现,我们只会在窗体加载的时候进入该静态构造方法,而在后面树形控件上面单击选中节点时候就不会进去该静态构造方法了,因为静态类的静态构造方法在程序运行时候只能运行一次。
总结
如果我们在外面有两个地方调用该类里面的静态方法,而且这两个地方在调用的时候传相同的泛型类型的话,它会认为你是在调用同一个FormFactory类,
以就只会执行一次静态构造方法,因为静态类的静态构造方法在程序运行时候只能运行一次,尽管你多次调用,只要传的泛型类型一致,那么也只是调用一次静态构造方法。
但是,如果你在外面两次调用该类的静态方法时候传的泛型类型不一致时,它会调用两次该类的静态构造方法,它会认为你是在调用两个不同的FormFactory类,每次调用的时候就都会调用该类的静态构造方法,创建新的类。