zoukankan      html  css  js  c++  java
  • 闲话静态构造函数

    这几天在学NHibernate 逛了一些网站,发现张老三的一些入门介绍很不错。看到一个网友转载他的文章
    http://philipsslg.cnblogs.com/articles/182149.html

    但是在里面看到一个比较怪的地方,引入的代码如下
    public class Sessions {
       
    private static readonly object lockObj = new object();
       
    private static ISessionFactory _factory;

       
    public static Sessions() {` }

       Public 
    static ISessionFactory Factory {
          
    get { 
             
    if ( _factory == null ) {
                
    lock ( lockObj ) {
                   
    if ( _factory == null ) {
                      Cfg.Configuration cfg 
    = new Cfg.Configuration ();
                      cfg.AddAssembly( Assembly.GetExecutingAssembly() );
                      _factory 
    = cfg.BuildSessionFactory(); 
                   }
                } 
    // end lock
             }
             
    return _factory;
          }
       } 
       
    public static ISession GetSession() {
          
    return Factory.OpenSession();
       }
    }


    上面的这句话 public static Sessions(){ } 看起来比较古怪。
    按照语义来说,静态的函数(这里是构造函数)不是提供给类本身调用吗?还加一个public的访问修饰符干吗(public的目的是可以提供给其他的类访问),不是自相矛盾吗?
     
    看了一些网友关于静态构造函数的描述
    构造函数分为两类:实例构造函数和静态构造函数。
    实例构造函数用来初始化特定的对象实例。
    静态构造函数也称类构造函数,在第一次使用类之前调用。

    静态构造函数自动被调用,不能被显式调用。虽然提供了许多约束条件,但是静态构造函数执行的确切时间和顺序是不确定的:
    一个类的静态构造函数在这个类的任何实例被创建前执行。
    一个类的静态构造函数在类的任何静态成员被引用前执行。
    一个类的静态构造函数在它的所有派生类的静态构造函数执行之后执行。
    一个类的静态构造函数从不会被执行一次以上。
  • 相关阅读:
    C#获取MD5哈希字符串
    C#序列化和反序列化Json数据
    C# Http请求
    C#DAL数据访问层
    C# ThreadPool.QueueUserWorkItem()之线程池异步
    C#以文件夹共享方式实现2G以上大文件传输
    该进程不具有执行此操作所需的“SeSecurityPrivilege”特权
    IIS绑定网站用域名进行访问的过程
    js获取url指定参数值
    js闭包(for循环内给元素添加事件)
  • 原文地址:https://www.cnblogs.com/Bruce_H21/p/382159.html
Copyright © 2011-2022 走看看