class DBHelp
    {       
       //连接字符串
        private const string connectionString = "server=.;database=MySchool;User Id=sa;Pwd=ok;";
        SqlConnection con;        #region 创建connection对象
        /// <summary>
        /// 创建connection对象
        /// </summary>
        public SqlConnection Con
        {
            get 
            {
                if (con==null)
                {
                    con = new SqlConnection(connectionString);
                }
                return con; 
            }
        }
        #endregion
}然后我打开数据库连接时,是应该用Con.Open();还是用con.Open();这两者有什么区别?
我现在知道是用Con.Open();但是不知道为什么?按照常理来讲不是应该用con.Open()的吗?各位大神,求解.

解决方案 »

  1.   

    con是字段,字段一般是private的,仅类内部使用;而Con是属性且为public,主要供类的使用者使用。
      

  2.   

    类内部用哪个都行
    外部用Conn
      

  3.   

    可是这样写我没有觉得哪里有好处啊,在学winform之前我一直都是用的
    SqlConnection con = new SqlConnection(字符串);
    con.Open();
    上面那样封装字段不是多此一举吗,还增加代码量。
      

  4.   

    封装字段可以加一些判断,是为了避免用户输入非法值,也是遵守了面向对象封装的原则。如果你不封装字段,用户就就可以随意对共有字段进行设值和取值。有了属性可以有效避免这点,而且通过只设置get或只设置set可以设置只读字段或只写字段,当然一般都是设置只读的。还要注意的是,属性本质上是方法。
      

  5.   

    你这个属性的作用是:
    get  
      {
      if (con==null)//如果没有实例,创建一个
      {
      con = new SqlConnection(connectionString);
      }
      return con;  //有的话免了,
      }
    问题1:con怎么会有实例呢?可能在构造函数里面实例化了。
    问题2:con怎么会为null呢?可能在其他方法里面释放了。
    结论:该属性保证了这个类的实例中只有一个SqlConnetion的实例。
      

  6.   

    你这个属性的作用是:
    get  
      {
      if (con==null)//如果没有实例,创建一个
      {
      con = new SqlConnection(connectionString);
      }
      return con;  //有的话免了,
      }
    问题1:con怎么会有实例呢?可能在构造函数里面实例化了。
    问题2:con怎么会为null呢?可能在其他方法里面释放了。
    结论:该属性保证了这个类的实例中只有一个SqlConnetion的实例。