Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何创建全局可见的变量?_C#_.net_Ado.net_Global Variables - Fatal编程技术网

C# 如何创建全局可见的变量?

C# 如何创建全局可见的变量?,c#,.net,ado.net,global-variables,C#,.net,Ado.net,Global Variables,如何声明变量并在所有文件中使用它?例如,我有: MySqlConnection cn = new MySqlConnection("blablabla"); 我想在所有文件中使用cn而不声明它。对您的问题的直接回答是公开和静态: public static class Session { static MySqlConnection _connection; public static MySqlConnection Connection { get

如何声明变量并在所有文件中使用它?例如,我有:

MySqlConnection cn = new MySqlConnection("blablabla");

我想在所有文件中使用cn而不声明它。

对您的问题的直接回答是公开和静态:

public static class Session
{
    static MySqlConnection _connection;

    public static MySqlConnection Connection
    {
        get
        {
            if (_connection == null)
            {
                // instantiate _connection here
            }

            return _connection;
        }
    }
}
然后,您可以使用Session.Connection从任何地方访问它

然而,这是一个糟糕的设计决策。在应用程序的整个生命周期中拥有唯一的实时连接实例对您没有任何好处。事实上,由于许多不同的原因,它实际上会让你的生活成为一场噩梦,比如不可预知的连接中断、不及时的打开/关闭以及多线程地狱

相反,您应该有某种连接工厂,它将创建一个正确初始化的连接对象并将其返回。这样,工厂方法就可以在全球范围内访问

public static ConnectionFactory
{
    public static MySqlConnection CreateConnection()
    {
        // create and return your MySqlConnection object
    }
}
然后,从代码中的任意位置:

using (var cn = ConnectionFactory.CreateConnection())
{
    // do data-related stuff
}
此处的using语句将确保连接实例在使用完毕后得到正确处理,从而将应用程序从无用的开销中解放出来,并使服务器不再保持与客户端的开放通道

如各国所述:

高性能应用程序保持与中的数据源的连接 使用时间最短


在构建数据驱动应用程序时,请记住这一点。

也许您可以在某些App.config或Web.config中声明连接字符串

然后每次你需要的时候都从那里读连接字符串

如本例所示:

<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="MyConnection 
    connectionString="Data Source=.;Initial Catalog=MyDB;Integrated Security=True"/>
  </connectionStrings>
</configuration> 
这里有一些关于这方面的信息:

使用


您可以在某些类中使用静态字段/属性。但在所有文件中共享连接不是一个好主意。C中没有全局变量。您可以通过组合或继承来解决它,但这很难看。重新考虑你的设计,你可以让你的程序中的所有东西都成为一个大型的“一刀切”的静态成员class@JeroenVannevel公共静态属性可以看作是全局变量。@Crono:它们是什么:公共静态属性。您必须访问包含类才能获取变量。它们可能是全局可见的变量,但我将问题解释为变量直接是类的一部分。
    class MySqlConnection
    {
        private static MySqlConnection _Instance;
        public static MySqlConnection Instance()
        {
            return _Instance == null ? _Instance = new MySqlConnection () : _Instance;
        }
    }