.net 如何创建全局可见的变量?

qybjjes1  于 2022-12-30  发布在  .NET
关注(0)|答案(4)|浏览(195)

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

MySqlConnection cn = new MySqlConnection("blablabla");

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

9rnv2umw

9rnv2umw1#

你的问题的直接答案是使它公开和静态:

public static class Session
{
    static MySqlConnection _connection;

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

            return _connection;
        }
    }
}

然后,您可以使用Session.Connection从任何地方访问它。
然而,恕我直言这是一个糟糕的设计决策。在应用程序的整个生命周期中拥有一个唯一的连接示例不会给你带来任何好处。事实上,它实际上会因为许多不同的原因让你的生活变成一场噩梦,比如不可预测的连接断开、不合时宜的打开/关闭和多线程地狱。
相反,您应该有某种类型的连接工厂,它将创建一个正确初始化的连接对象并将其返回。这样,THAT 工厂方法就可以被全局访问。

public static ConnectionFactory
{
    public static MySqlConnection CreateConnection()
    {
        // create and return your MySqlConnection object
    }
}

然后,从代码中的任何位置:

using (var cn = ConnectionFactory.CreateConnection())
{
    // do data-related stuff
}

这里的using语句将确保连接示例在您使用完毕后得到正确处置,从而使您的应用摆脱无用的开销,并使服务器不必保持与客户端的开放通道。
正如ADO .NET最佳实践所述:
高性能应用程序将与数据源的连接保持在最短时间内(...)
无论何时构建数据驱动应用程序,都要记住这一点。

kupeojn6

kupeojn62#

使用**Singleton Pattern**。

class MySqlConnection
    {
        private static MySqlConnection _Instance;
        public static MySqlConnection Instance()
        {
            return _Instance == null ? _Instance = new MySqlConnection () : _Instance;
        }
    }
vc9ivgsu

vc9ivgsu3#

也许您可以在App.configWeb.config中声明连接字符串。
然后在每次需要时从那里读取connectionString。
类似于以下示例:

<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="MyConnection 
    connectionString="Data Source=.;Initial Catalog=MyDB;Integrated Security=True"/>
  </connectionStrings>
</configuration>

这里有一些信息:
http://msdn.microsoft.com/es-es/library/ms254494(v=vs.110).aspx

7hiiyaii

7hiiyaii4#

嗨,如果你使用WPF应用程序,你可以在一个类中声明你的变量,这个类是一个App分部类。
1.创建一个类名youwant.cs
代码隐藏:

public partial class App
{
    #region - your global variable - 
    public MySqlConnection Cn
    {
        get;
        set;
    } ="blablablá"
    #endregion
 }

在项目任何部分,您都可以按以下方式使用它:
在xaml中:

<TextBlock x:Name="TextBlockExampler" Text="{Binding Cn, Source={x:Static Application.Current}"/>

代码隐藏:

using System.Windows;
.....
string texting = (Application.Current as App).Cn
....

就是这样。

相关问题