比如:有Form1、Form2两个窗体,和一个DBClient负责数据库访问的类,当Form1需要与服务器通讯时,需要实例化DBClient,才能使用DBClient的方法,当Form2与服务器通讯的时候又要实例化后,才能调用方法,请问有没有办法在程序Main方法中实例化DBClient,form1和Form2无需实例化,直接调用具体方法即可????之前朋友说可以使用单例模式,可我使用单例模式后,Form1在数据库中创建了一个临时表,Form2缺无法访问临时表,两个窗体的数据库会话并不一样,是否说明单例模式并不是同一实例?
谢谢,求教了!

解决方案 »

  1.   

    单例:
        class DBClient
        {
            private DBClient() { 
            
            }
            static DBClient instance;
            static object obj = new object();
            public static DBClient GetInstance()
            {
                if (instance == null)
                {
                    lock (obj)
                    {
                        if (instance == null)
                        {
                            instance = new DBClient();                    }
                    }
                }
                return instance;
            }
        }调用:            DBClient db = DBClient.GetInstance();
                db.方法();
      

  2.   


    师兄,再请教一下
    你提供的单例,是在有代码的情况下,修改类的代码吧,如果没有代码,而是一个已经编译好的DLL,该如何实现单例?
      

  3.   

    public static DBClient client = DBClient.GetInstance();
    需要的地方   client.方法
      

  4.   

    把DBClient定义为static不能满足需要吗?
      

  5.   


    在外面简单包装一下:
        class MyDBClient
        {
            private MyDBClient() { 
             
            }
            static DBClient instance;
            static object obj = new object();
            public static DBClient GetInstance()
            {
                if (instance == null)
                {
                    lock (obj)
                    {
                        if (instance == null)
                        {
                            instance = new DBClient();
     
                        }
                    }
                }
                return instance;
            }
        }