如何全局访问变量?

时间:2013-04-16 13:55:39

标签: c# .net

我正在使用AccountManager扩展我的应用程序(我称之为)。该应用程序有一个登录表单(它与主表单不同),此处输入的信息为setAccountManager

AccountManager AM = new AccountManager();
AM.username = "Username";
AM.password = "myPassword";

但是,现在(可能很明显)问题是,我无法在主窗体上获取此信息(因为我调用new AccountManager();所以它将启动AccountManager的新实例。 / p>

如何在全球范围内使用班级(AccountManager)?或者我是否只使用static属性制作公共变量?

5 个答案:

答案 0 :(得分:3)

创建帐户管理器的内部静态单例实例:

public class AccountManager
{
    private static Lazy<AccountManager> _am = new Lazy<AccountManager>();
    internal static AccountManager Current { get { return _am.Value; } }
}

这样,您可以从同一程序集中的任何位置访问当前应用程序域中的(保证)AccountManager单例实例:AccountManager.Current

查找Lazy的构造函数方法 - 如果需要,可以提供工厂方法(从而允许您正确封装密码),并且还可以保证工厂方法的线程安全。

此外,Lazy意味着在构建您的AccountManager对象时产生的任何昂贵操作都将被延迟,直到绝对必要,这意味着您的应用程序在绝对必要之前不会使用资源。

答案 1 :(得分:2)

您可以将您的AccountManager AM作为参数传递到您的登录表单,例如

loginForm.Show(AM);

并且在loginForm中应该有类似的内容:

AccountManager accountManager = null;
public DialogResult ShowDialog(AccountManager am)
{
accountManager = am;
return this.ShowDialog();    
}

答案 2 :(得分:0)

检查以下内容。帐户类包含用户名和密码。使用AccountManager初始化Account对象一次。使用AccountManager.GetAccountInfo()方法全局获取Account obj。

class Account
{
    public string username { get; set; }
    public string password { get; set; }

    public Account(string username, string password)
    {
        this.username = username;
        this.password = password;
    }
}

class AccountManager
{
    Account acc = null;

    public AccountManager(string username, string password)
    {
        if(acc == null)
        {
            acc = new Account(username, password);
        }
    }

    public Account GetAccountInfo()
    {
        return acc;
    }
}

答案 3 :(得分:0)

我使用以下方法解决了它:

在我的mainForm上,我发起了AccountManager

public static AccountManager AM = new AccountManager();

然后,在我需要访问AccountManager的每个表单上,我使用以下代码:

AccountManager AM = mainForm.AM;
MessageBox.Show(AM.username);

答案 4 :(得分:-1)

您可以将变量发送到constructor的{​​{1}},如下所示:

AccountManager

Main

AccountManager AM = new AccountManager(Username, Password);

AccountManager

或者您可以将public AccountManager(string username, string password) { } 设为静态AccountManager

Static Class MSDN