http://www.cnblogs.com/flora_asp_net/archive/2009/08/07/1541530.html
这个帖子里,数据库访问层(DAL)中的代码:
        private static SqlConnection connection;
        public static SqlConnection Connection   //连接数据库,并打开连接
        {
            get
            {
                string connectionString = "server=.\\sql2005;database=TeachSys;uid=sa;pwd=sa2005";
                if (connection == null)
                {
                    connection = new SqlConnection(connectionString);
                    Connection.Open();
                }
                return connection;
            }
        }
它判断connection变量(小写)如果为null则实例化数据库连接,并由Connection(大写)变量来打开连接,我的疑问是,connection变量和Connection变量是如何发生联系的?应该由connection变量(小写)来实现Open这个方法啊,而且我改成connection.Open()也能够编译通过,这我就搞不懂了,请大家解惑。

解决方案 »

  1.   

    connection是变量,Connection是属性!
      

  2.   

    你封装过字段没有?
        private int id;    public int Id
        {
            get { return id; }
            set { id = value; }
        }注意ID的大小写!!
      

  3.   

    zhoukang0916兄说的那个我理解,类似于事件触发那样的概念对吧,但是我顶楼的代码中为啥要用大写的Connection来打开数据连接?并且这个地方用小写的connection来打开也没问题,这是为啥?
      

  4.   

    .net是不能识别的,不信可以试试同时定义这样的两个变量,编译器默认为一个变量的,在编译的过程中:Connection=connection,你看起来时不一样的,但是编译的时候认为是一个变量,之前我们项目就因为这样报过一次很奇怪的错,至于有时认为是同一变量building报错我就不知道了
      

  5.   

    2楼是正确的。 你要看着不明白,就把Connection 改个名字,设置一个断点调试。看看程序怎么执行的就明白了。
      

  6.   

    属性是对字段的封装
    仔细看一下运行过程就明白了private static SqlConnection connection;
    public static SqlConnection Connection   //连接数据库,并打开连接
    {
    get//Connection属性获取方法
    {
    string connectionString= "server=.\\sql2005;database=TeachSys;uid=sa;pwd=sa2005";
                    if (connection == null)
                    {
    //第一次运行,即connection字段为null
                        connection = new SqlConnection(connectionString);//connection字段赋值//此时调用Connection属性,则同样会调用Connection属性的get方法,不同的是,和第一次不同,connection字段已经赋值,所以不会进入if语句范围,直接返回connection字段,所以,这里和直接调用字段是一样的
                        Connection.Open();
                    }
                    return connection;
    }
    }